{"componentChunkName":"component---src-templates-post-jsx","path":"/프론트엔드 개발자 면접 질문(기술면접) 질문 정리 모음 - Vue/","result":{"data":{"site":{"siteMetadata":{"title":"jigglog","author":"JIGGLYPOP","homepage":"http://jigglog.s3-website.ap-northeast-2.amazonaws.com"}},"post":{"id":"bd63844a-5ea5-5962-8cb2-1bf2e4c7b94e","html":"<blockquote>\n<p>프론트 엔드 면접 질문용(Vue) 공부 후 정리 자료입니다. 정확하지 않을 수 있으니 꼭 다시 책이나 자료를 참고하여 공부하세요</p>\n</blockquote>\n<ol>\n<li>\n<h3 id=\"devtool이란\" style=\"position:relative;\"><a href=\"#devtool%EC%9D%B4%EB%9E%80\" aria-label=\"devtool이란 permalink\" class=\"anchor-header before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>DevTool이란?</h3>\n<p>DevTool은 Vue 어플리케이션을 사용자 친화적인 인터페이스로 디버그 할 수 있게 도와주는 브라우저 확장 프로그램입니다.</p>\n<p><img src=\"https://github.com/sudheerj/vuejs-interview-questions/raw/master/images/DevTools.png\" alt=\"img\"></p>\n<p>Note: Vue 페이지가 배포 모드일 경우에는 DevTool로 디버그할 수 없습니다.</p>\n</li>\n<li>\n<h3 id=\"vuejs의-브라우저-지원은\" style=\"position:relative;\"><a href=\"#vuejs%EC%9D%98-%EB%B8%8C%EB%9D%BC%EC%9A%B0%EC%A0%80-%EC%A7%80%EC%9B%90%EC%9D%80\" aria-label=\"vuejs의 브라우저 지원은 permalink\" class=\"anchor-header before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>VueJS의 브라우저 지원은?</h3>\n<p>ECMAScript5를 지원하는 브라우저에서 동작 가능합니다. IE8 이하의 브라우저에서는 지원하지 않습니다.</p>\n</li>\n<li>\n<h3 id=\"cdn으로-vue를-사용하는-방법은\" style=\"position:relative;\"><a href=\"#cdn%EC%9C%BC%EB%A1%9C-vue%EB%A5%BC-%EC%82%AC%EC%9A%A9%ED%95%98%EB%8A%94-%EB%B0%A9%EB%B2%95%EC%9D%80\" aria-label=\"cdn으로 vue를 사용하는 방법은 permalink\" class=\"anchor-header before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>CDN으로 Vue를 사용하는 방법은?</h3>\n<p>Vue는 jsdelivr, unpkg, cdnjs에서 제공하는 CDN을 이용해서도 사용이 가능합니다. 일반적으로 초기 기획, 학습용으로 적합합니다.</p>\n<div class=\"gatsby-highlight\" data-language=\"text\"><pre class=\"language-text\"><code class=\"language-text\">&lt;script src=&quot;https://cdn.jsdelivr.net/npm/vue@2.6.7/dist/vue.js&quot;&gt;&lt;/script&gt;</code></pre></div>\n<div class=\"gatsby-highlight\" data-language=\"text\"><pre class=\"language-text\"><code class=\"language-text\">&lt;script type=&quot;module&quot;&gt;\n import Vue from &#39;https://cdn.jsdelivr.net/npm/vue@2.6.7/dist/vue.esm.browser.js&#39;\n&lt;/script&gt;</code></pre></div>\n<p>Note: 버전 정보를 지우면 항상 최신 버전을 가져옵니다.</p>\n</li>\n<li>\n<h3 id=\"강제로-업데이트를-발생시키는-방법은\" style=\"position:relative;\"><a href=\"#%EA%B0%95%EC%A0%9C%EB%A1%9C-%EC%97%85%EB%8D%B0%EC%9D%B4%ED%8A%B8%EB%A5%BC-%EB%B0%9C%EC%83%9D%EC%8B%9C%ED%82%A4%EB%8A%94-%EB%B0%A9%EB%B2%95%EC%9D%80\" aria-label=\"강제로 업데이트를 발생시키는 방법은 permalink\" class=\"anchor-header before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>강제로 업데이트를 발생시키는 방법은?</h3>\n<p>매우 드문 경우지만, 데이터가 변경되지 않았음에도 재 렌더링을 위해 강제로 업데이트를 발생시켜야 할 수도 있습니다. 이 경우 <code class=\"language-text\">vm.$forceUpdate()</code> API 메소드를 이용할 수 있습니다.</p>\n<p>Note: 모든 하위 컴포넌트에는 영향이 미치지 않으며, 슬롯 그 자체가 삽입된 슬롯 자체 및 하위 컴포넌트에만 영향을 미칩니다.</p>\n</li>\n<li>\n<h3 id=\"템플릿에서-once-지시자를-쓰는-이유는\" style=\"position:relative;\"><a href=\"#%ED%85%9C%ED%94%8C%EB%A6%BF%EC%97%90%EC%84%9C-once-%EC%A7%80%EC%8B%9C%EC%9E%90%EB%A5%BC-%EC%93%B0%EB%8A%94-%EC%9D%B4%EC%9C%A0%EB%8A%94\" aria-label=\"템플릿에서 once 지시자를 쓰는 이유는 permalink\" class=\"anchor-header before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>템플릿에서 once 지시자를 쓰는 이유는?</h3>\n<p>많은 양의 정적 컨텐츠를 렌더링 할 때, 성능 향상을 위해 엘리먼트 및 컴포넌트를 한번만 렌더링하는 용도로 사용합니다.</p>\n<div class=\"gatsby-highlight\" data-language=\"text\"><pre class=\"language-text\"><code class=\"language-text\">Vue.component(&#39;legal-terms&#39;, {\n template: `\n   &lt;div v-once&gt;\n     &lt;h1&gt;Legal Terms&lt;/h1&gt;\n     ... a lot of static content goes here...\n   &lt;/div&gt;\n `\n})</code></pre></div>\n<p>Note: 정적 컨텐츠가 많아서 느려지는 일이 발생하지 않는 한, 과다하게 사용하지 않는 것이 좋습니다.</p>\n</li>\n<li>\n<h3 id=\"루트-vue-인스턴스에-접근하는-방법은\" style=\"position:relative;\"><a href=\"#%EB%A3%A8%ED%8A%B8-vue-%EC%9D%B8%EC%8A%A4%ED%84%B4%EC%8A%A4%EC%97%90-%EC%A0%91%EA%B7%BC%ED%95%98%EB%8A%94-%EB%B0%A9%EB%B2%95%EC%9D%80\" aria-label=\"루트 vue 인스턴스에 접근하는 방법은 permalink\" class=\"anchor-header before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>루트 Vue 인스턴스에 접근하는 방법은?</h3>\n<p>루트 Vue 인스턴스(<code class=\"language-text\">new Vue()</code>)는 <code class=\"language-text\">$root</code> 속성을 이용해 접근할 수 있습니다.</p>\n<div class=\"gatsby-highlight\" data-language=\"text\"><pre class=\"language-text\"><code class=\"language-text\">// The root Vue instance\nnew Vue({\n data: {\n   age: 26\n },\n computed: {\n   fullName: function () { /* ... */ }\n },\n methods: {\n   interest: function () { /* ... */ }\n }\n})</code></pre></div>\n<p>루트 인스턴스의 데이터와 메소드들을 하위 컴포넌트에서 아래와 같은 방법으로 접근할 수 있습니다.</p>\n<div class=\"gatsby-highlight\" data-language=\"text\"><pre class=\"language-text\"><code class=\"language-text\">// Get root data\nthis.$root.age\n\n// Set root data\nthis.$root.age = 29\n\n// Access root computed properties\nthis.$root.fullName\n\n// Call root methods\nthis.$root.interest()</code></pre></div>\n<p>상태 관리를 위한 용도라면 Vuex를 사용하는 것이 낫습니다.</p>\n</li>\n<li></li>\n<li>\n<h3 id=\"rendererror-메소드의-목적은\" style=\"position:relative;\"><a href=\"#rendererror-%EB%A9%94%EC%86%8C%EB%93%9C%EC%9D%98-%EB%AA%A9%EC%A0%81%EC%9D%80\" aria-label=\"rendererror 메소드의 목적은 permalink\" class=\"anchor-header before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>renderError 메소드의 목적은?</h3>\n<p>기본 <code class=\"language-text\">render</code> 함수가 렌더링 도중 에러가 발생하면, 대체되는 렌더링 결과를 제공합니다. <code class=\"language-text\">renderError</code>의 두 번째 전달인자로 에러가 전달됩니다.</p>\n<div class=\"gatsby-highlight\" data-language=\"text\"><pre class=\"language-text\"><code class=\"language-text\">new Vue({\n render (h) {\n   throw new Error(&#39;An error&#39;)\n },\n renderError (h, err) {\n   return h(&#39;div&#39;, { style: { color: &#39;red&#39; }}, err.stack)\n }\n}).$mount(&#39;#app&#39;)</code></pre></div>\n</li>\n<li>\n<h3 id=\"하위-컴포넌트에서-상위-컴포넌트로-직접-접근하는-방법은\" style=\"position:relative;\"><a href=\"#%ED%95%98%EC%9C%84-%EC%BB%B4%ED%8F%AC%EB%84%8C%ED%8A%B8%EC%97%90%EC%84%9C-%EC%83%81%EC%9C%84-%EC%BB%B4%ED%8F%AC%EB%84%8C%ED%8A%B8%EB%A1%9C-%EC%A7%81%EC%A0%91-%EC%A0%91%EA%B7%BC%ED%95%98%EB%8A%94-%EB%B0%A9%EB%B2%95%EC%9D%80\" aria-label=\"하위 컴포넌트에서 상위 컴포넌트로 직접 접근하는 방법은 permalink\" class=\"anchor-header before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>하위 컴포넌트에서 상위 컴포넌트로 직접 접근하는 방법은?</h3>\n<p>상위 컴포넌트에서는 하위 컴포넌트들을 <code class=\"language-text\">$children</code> 배열로 참조하며, 하위 컴포넌트에서 상위 컴포넌트를 <code class=\"language-text\">$parent</code> 속성으로 참조합니다.</p>\n</li>\n<li>\n<h3 id=\"vuex란\" style=\"position:relative;\"><a href=\"#vuex%EB%9E%80\" aria-label=\"vuex란 permalink\" class=\"anchor-header before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>vuex란?</h3>\n<p>Vuex는 Vue.js 애플리케이션을 위한 상태 관리 패턴 + 라이브러리(Flux에서 영감을 받은 애플리케이션 아키텍처)입니다. 예측 가능한 방식으로만 상태가 변경될 수 있도록 보장하는 규칙을 가지고 있는 애플리케이션의 모든 컴포넌트를 위한 중앙 집중식 저장소입니다.</p>\n</li>\n<li>\n<h3 id=\"상태-관리-패턴의-주요-구성-요소는-무엇입니까\" style=\"position:relative;\"><a href=\"#%EC%83%81%ED%83%9C-%EA%B4%80%EB%A6%AC-%ED%8C%A8%ED%84%B4%EC%9D%98-%EC%A3%BC%EC%9A%94-%EA%B5%AC%EC%84%B1-%EC%9A%94%EC%86%8C%EB%8A%94-%EB%AC%B4%EC%97%87%EC%9E%85%EB%8B%88%EA%B9%8C\" aria-label=\"상태 관리 패턴의 주요 구성 요소는 무엇입니까 permalink\" class=\"anchor-header before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>상태 관리 패턴의 주요 구성 요소는 무엇입니까?</h3>\n<p>상태 관리의 주요 구성요소는 상태 및 뷰, 액션입니다. 이러한 구성요소에 따른 패턴을 애플리케이션에서 상태 관리 패턴이라고 합니다. 아래에 자세한 구성 요소가 자세히 설명되어 있습니다.</p>\n<ol>\n<li>상태는 앱을 구동시키는 원천입니다.</li>\n<li>뷰는 단지 상태의 선언적 매핑입니다.</li>\n<li>액션은 뷰에서 사용자 입력에 반응하여 상태가 변할 수 있도록 하는 방법입니다. 위의 3가지 구성요소와 함께 상태 관리 패턴을 따르는 카운터 예를 들어보겠습니다.</li>\n</ol>\n<div class=\"gatsby-highlight\" data-language=\"text\"><pre class=\"language-text\"><code class=\"language-text\">new Vue({\n  // state\n  data () {\n    return {\n      count: 0\n    }\n  },\n  // view\n  template: `\n    &lt;div&gt;{{ count }}&lt;/div&gt;\n  `,\n  // actions\n  methods: {\n    increment () {\n      this.count++\n    }\n  }\n})</code></pre></div>\n</li>\n<li>\n<h3 id=\"vuex에서-단방향-데이터-흐름-모델을-어떻게-표현합니까\" style=\"position:relative;\"><a href=\"#vuex%EC%97%90%EC%84%9C-%EB%8B%A8%EB%B0%A9%ED%96%A5-%EB%8D%B0%EC%9D%B4%ED%84%B0-%ED%9D%90%EB%A6%84-%EB%AA%A8%EB%8D%B8%EC%9D%84-%EC%96%B4%EB%96%BB%EA%B2%8C-%ED%91%9C%ED%98%84%ED%95%A9%EB%8B%88%EA%B9%8C\" aria-label=\"vuex에서 단방향 데이터 흐름 모델을 어떻게 표현합니까 permalink\" class=\"anchor-header before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Vuex에서 단방향 데이터 흐름 모델을 어떻게 표현합니까?</h3>\n<p>Vue.js는 props 속성을 통해 단방향 데이터 흐름 모델을 표현합니다. vuex에서 이와 동일한 개념은 아래와 같이 나타낼 수 있습니다.</p>\n<p><img src=\"https://github.com/sudheerj/vuejs-interview-questions/raw/master/images/flow.png\" alt=\"img\"></p>\n</li>\n</ol>\n<h3 id=\"vuejs-loader는-무엇입니까\" style=\"position:relative;\"><a href=\"#vuejs-loader%EB%8A%94-%EB%AC%B4%EC%97%87%EC%9E%85%EB%8B%88%EA%B9%8C\" aria-label=\"vuejs loader는 무엇입니까 permalink\" class=\"anchor-header before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>vuejs loader는 무엇입니까?</h3>\n<p>Vue loader는 Vue 컴포넌트를 싱글 파일 컴포넌트(SFC, SFCs)라고 하는 형식으로 작성할 수 있는 웹팩용 로더입니다. 예를 들어 <code class=\"language-text\">HelloWorld</code> 라는 SFC를 작성하면 아래와 같습니다.</p>\n<div class=\"gatsby-highlight\" data-language=\"vue\"><pre class=\"language-vue\"><code class=\"language-vue\">&lt;template&gt;\n  &lt;div class=&quot;greeting&quot;&gt;{{ message }}&lt;/div&gt;\n&lt;/template&gt;\n\n&lt;script&gt;\nexport default {\n  data () {\n    return {\n      message: &#39;Hello world for vueloader!&#39;\n    }\n  }\n}\n&lt;/script&gt;\n\n&lt;style&gt;\n.greeting {\n  color: blue;\n}\n&lt;/style&gt;</code></pre></div>\n<h3 id=\"웹팩에서-vue-loader를-설정하는-방법은\" style=\"position:relative;\"><a href=\"#%EC%9B%B9%ED%8C%A9%EC%97%90%EC%84%9C-vue-loader%EB%A5%BC-%EC%84%A4%EC%A0%95%ED%95%98%EB%8A%94-%EB%B0%A9%EB%B2%95%EC%9D%80\" aria-label=\"웹팩에서 vue loader를 설정하는 방법은 permalink\" class=\"anchor-header before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>웹팩에서 vue loader를 설정하는 방법은?</h3>\n<p><code class=\"language-text\">Vue-Loader</code>의 설정은 웹팩 설정에 Vue Loader의 플러그인을 추가하기 때문에 다른 로더와는 약간 다릅니다. Vue 로더 플러그인은 정의된 다른 규칙(js 및 css 규칙)을 복제하여 <code class=\"language-text\">.vue</code> 파일에서 해당 언어 블록(<code class=\"language-text\">script</code> 및 <code class=\"language-text\">style</code>)에 적용하기 위해 필요합니다. Vue 로더에 대한 웹팩 구성의 간단한 예는 다음과 같습니다.</p>\n<div class=\"gatsby-highlight\" data-language=\"javascript\"><pre class=\"language-javascript\"><code class=\"language-javascript\"><span class=\"token comment\">// webpack.config.js</span>\n<span class=\"token keyword\">const</span> VueLoaderPlugin <span class=\"token operator\">=</span> <span class=\"token function\">require</span><span class=\"token punctuation\">(</span><span class=\"token string\">'vue-loader/lib/plugin'</span><span class=\"token punctuation\">)</span>\n\nmodule<span class=\"token punctuation\">.</span>exports <span class=\"token operator\">=</span> <span class=\"token punctuation\">{</span>\n  mode<span class=\"token operator\">:</span> <span class=\"token string\">'development'</span><span class=\"token punctuation\">,</span>\n  module<span class=\"token operator\">:</span> <span class=\"token punctuation\">{</span>\n    rules<span class=\"token operator\">:</span> <span class=\"token punctuation\">[</span>\n      <span class=\"token punctuation\">{</span>\n        test<span class=\"token operator\">:</span> <span class=\"token regex\">/\\.vue$/</span><span class=\"token punctuation\">,</span>\n        loader<span class=\"token operator\">:</span> <span class=\"token string\">'vue-loader'</span>\n      <span class=\"token punctuation\">}</span><span class=\"token punctuation\">,</span>\n      <span class=\"token comment\">// this will apply to both plain `.js` files and `&lt;script>` blocks in `.vue` files</span>\n      <span class=\"token punctuation\">{</span>\n        test<span class=\"token operator\">:</span> <span class=\"token regex\">/\\.js$/</span><span class=\"token punctuation\">,</span>\n        loader<span class=\"token operator\">:</span> <span class=\"token string\">'babel-loader'</span>\n      <span class=\"token punctuation\">}</span><span class=\"token punctuation\">,</span>\n      <span class=\"token comment\">// this will apply to both plain `.css` files and `&lt;style>` blocks in `.vue` files</span>\n      <span class=\"token punctuation\">{</span>\n        test<span class=\"token operator\">:</span> <span class=\"token regex\">/\\.css$/</span><span class=\"token punctuation\">,</span>\n        use<span class=\"token operator\">:</span> <span class=\"token punctuation\">[</span>\n          <span class=\"token string\">'vue-style-loader'</span><span class=\"token punctuation\">,</span>\n          <span class=\"token string\">'css-loader'</span>\n        <span class=\"token punctuation\">]</span>\n      <span class=\"token punctuation\">}</span>\n    <span class=\"token punctuation\">]</span>\n  <span class=\"token punctuation\">}</span><span class=\"token punctuation\">,</span>\n  plugins<span class=\"token operator\">:</span> <span class=\"token punctuation\">[</span>\n    <span class=\"token comment\">// make sure to include the plugin for cloning and mapping them to respective language blocks</span>\n    <span class=\"token keyword\">new</span> <span class=\"token class-name\">VueLoaderPlugin</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span>\n  <span class=\"token punctuation\">]</span>\n<span class=\"token punctuation\">}</span></code></pre></div>\n<h3 id=\"vue-loader의-asset-url-핸들링-규칙은\" style=\"position:relative;\"><a href=\"#vue-loader%EC%9D%98-asset-url-%ED%95%B8%EB%93%A4%EB%A7%81-%EA%B7%9C%EC%B9%99%EC%9D%80\" aria-label=\"vue loader의 asset url 핸들링 규칙은 permalink\" class=\"anchor-header before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>vue-loader의 Asset URL 핸들링 규칙은?</h3>\n<ol>\n<li>절대 경로(Absolute path): 만약 URL 경로가 <code class=\"language-text\">/images/loader.png</code>와 같은 절대 경로라면 그대로 보존됩니다.</li>\n<li>상대 경로(Relative path): 만약 URL 경로가 <code class=\"language-text\">./images/loader.png</code>와 같은 절대 경로라면 상대 모듈 요청(<code class=\"language-text\">require(./images/loader.png)</code>)으로 컴파일되고 파일 시스템의 폴더 구조를 기반으로 해결됩니다.</li>\n<li>~로 시작하는 경로(URLs starts with ~ symbol): 만약 URL 경로가 <code class=\"language-text\">./some-node-package/loader.png</code>와 같은 <code class=\"language-text\">~</code>로 시작된다면, 모듈 요청으로 컴파일됩니다.</li>\n<li>@로 시작하는 경로(URLs starts with @ symbol): 만약 URL 경로가 <code class=\"language-text\">@</code>로 시작된다면, 모듈 요청으로 컴파일됩니다. 이것은 웹팩 <code class=\"language-text\">config</code>에 <code class=\"language-text\">@</code>에 대한 별칭이 있는 경우에 유용하며, 기본적으로 <code class=\"language-text\">vue-cli</code>가 만든 모든 프로젝트에서 <code class=\"language-text\">/src</code>를 가리킵니다.</li>\n</ol>\n<h3 id=\"vue-loader에서-전처리기를-사용하는-경우라면\" style=\"position:relative;\"><a href=\"#vue-loader%EC%97%90%EC%84%9C-%EC%A0%84%EC%B2%98%EB%A6%AC%EA%B8%B0%EB%A5%BC-%EC%82%AC%EC%9A%A9%ED%95%98%EB%8A%94-%EA%B2%BD%EC%9A%B0%EB%9D%BC%EB%A9%B4\" aria-label=\"vue loader에서 전처리기를 사용하는 경우라면 permalink\" class=\"anchor-header before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>vue loader에서 전처리기를 사용하는 경우라면?</h3>\n<p><code class=\"language-text\">Vue-loader</code>는 작성된 언어 블록의 <code class=\"language-text\">lang</code> 속성을 이용해 적절한 로더를 적용하고 웹팩 설정에 적용된 규칙을 따릅니다. <code class=\"language-text\">Vue-loader</code>에서 SASS, LESS, Stylus나 PostCSS 같은 전처리기를 사용할 수 있습니다.</p>\n<h3 id=\"범위-cssscoped-css란\" style=\"position:relative;\"><a href=\"#%EB%B2%94%EC%9C%84-cssscoped-css%EB%9E%80\" aria-label=\"범위 cssscoped css란 permalink\" class=\"anchor-header before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>범위 CSS(Scoped CSS)란?</h3>\n<p>범위를 가지는 CSS(Scoped CSS)는 Vue에서 싱글 파일 컴포넌트에서 해당 컴포넌트에 작성된 CSS가 다른 컴포넌트에 영향을 미치지 않도록 그 적용 범위를 제한하는 것을 의미합니다. 즉, <code class=\"language-text\">&lt;style&gt;</code> 태그가 <code class=\"language-text\">scoped</code> 속성을 가지고 있다면, 해당 CSS는 해당 컴포넌트에서만 영향을 미칩니다.</p>\n<div class=\"gatsby-highlight\" data-language=\"text\"><pre class=\"language-text\"><code class=\"language-text\">&lt;style scoped&gt;\n.greeting {\n  color: green;\n}\n&lt;/style&gt;</code></pre></div>\n<div class=\"gatsby-highlight\" data-language=\"text\"><pre class=\"language-text\"><code class=\"language-text\">&lt;template&gt;\n  &lt;div class=&quot;greeting&quot;&gt;Let&#39;s start Scoped CSS&lt;/div&gt;\n&lt;/template&gt;</code></pre></div>\n<p>위의 코드는 아래로 변환됩니다.</p>\n<div class=\"gatsby-highlight\" data-language=\"text\"><pre class=\"language-text\"><code class=\"language-text\"> &lt;style scoped&gt;\n .greeting[data-v-f3f3eg9] {\n   color: green;\n }\n &lt;/style&gt;</code></pre></div>\n<div class=\"gatsby-highlight\" data-language=\"text\"><pre class=\"language-text\"><code class=\"language-text\">&lt;template&gt;\n  &lt;div class=&quot;greeting&quot; data-v-f3f3eg9&gt;Let&#39;s start Scoped CSS&lt;/div&gt;\n&lt;/template&gt;</code></pre></div>\n<h3 id=\"범위-css와-전역-css를-함께-쓸-수-있을까\" style=\"position:relative;\"><a href=\"#%EB%B2%94%EC%9C%84-css%EC%99%80-%EC%A0%84%EC%97%AD-css%EB%A5%BC-%ED%95%A8%EA%BB%98-%EC%93%B8-%EC%88%98-%EC%9E%88%EC%9D%84%EA%B9%8C\" aria-label=\"범위 css와 전역 css를 함께 쓸 수 있을까 permalink\" class=\"anchor-header before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>범위 CSS와 전역 CSS를 함께 쓸 수 있을까?</h3>\n<p>범위가 지정된 스타일과 범위가 지정되지 않은 스타일은 동일한 컴포넌트에 포함할 수 있습니다.</p>\n<div class=\"gatsby-highlight\" data-language=\"text\"><pre class=\"language-text\"><code class=\"language-text\">&lt;style&gt;\n/* global styles */\n&lt;/style&gt;\n\n&lt;style scoped&gt;\n/* local styles */\n&lt;/style&gt;</code></pre></div>\n<h3 id=\"범위-css가-자식-컴포넌트에-영향을-미치게-하는-방법은\" style=\"position:relative;\"><a href=\"#%EB%B2%94%EC%9C%84-css%EA%B0%80-%EC%9E%90%EC%8B%9D-%EC%BB%B4%ED%8F%AC%EB%84%8C%ED%8A%B8%EC%97%90-%EC%98%81%ED%96%A5%EC%9D%84-%EB%AF%B8%EC%B9%98%EA%B2%8C-%ED%95%98%EB%8A%94-%EB%B0%A9%EB%B2%95%EC%9D%80\" aria-label=\"범위 css가 자식 컴포넌트에 영향을 미치게 하는 방법은 permalink\" class=\"anchor-header before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>범위 CSS가 자식 컴포넌트에 영향을 미치게 하는 방법은?</h3>\n<p>범위가 지정된 CSS에서, 자식 컴포넌트에 영향을 미치게 하는 방법은 <code class=\"language-text\">&gt;&gt;&gt;</code> 연산자를 사용하면 됩니다.</p>\n<div class=\"gatsby-highlight\" data-language=\"text\"><pre class=\"language-text\"><code class=\"language-text\">&lt;style scoped&gt;\n.class1 &gt;&gt;&gt; .class2 { /* ... */ }\n&lt;/style&gt;</code></pre></div>\n<p>위의 CSS는 아래로 컴파일됩니다.</p>\n<div class=\"gatsby-highlight\" data-language=\"text\"><pre class=\"language-text\"><code class=\"language-text\">.class1[data-v-f3f3eg9] .class2 { /* ... */ }</code></pre></div>\n<p>Note: SASS에서는 <code class=\"language-text\">&gt;&gt;&gt;</code> 연산자가 제대로 작동하지 않을 수 있습니다. 이때는 <code class=\"language-text\">/deep/</code> 또는 <code class=\"language-text\">::v-deep</code> 선택자를 대신 이용합니다.</p>\n<h3 id=\"상위-컴포넌트의-범위-css가-하위-컴포넌트에-영향을-주는가\" style=\"position:relative;\"><a href=\"#%EC%83%81%EC%9C%84-%EC%BB%B4%ED%8F%AC%EB%84%8C%ED%8A%B8%EC%9D%98-%EB%B2%94%EC%9C%84-css%EA%B0%80-%ED%95%98%EC%9C%84-%EC%BB%B4%ED%8F%AC%EB%84%8C%ED%8A%B8%EC%97%90-%EC%98%81%ED%96%A5%EC%9D%84-%EC%A3%BC%EB%8A%94%EA%B0%80\" aria-label=\"상위 컴포넌트의 범위 css가 하위 컴포넌트에 영향을 주는가 permalink\" class=\"anchor-header before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>상위 컴포넌트의 범위 CSS가 하위 컴포넌트에 영향을 주는가?</h3>\n<p>일반적으로 상위 컴포넌트의 스타일은 하위 컴포넌트에 영향을 미치지 않습니다. 하지만 하위 컴포넌트의 루트 노드는 상위 컴포넌트와 하위 컴포넌트의 스타일에 모두 영향을 받습니다. 즉, 하위 컴포넌트의 루트 노드에 상위 컴포넌트에서 사용된 클래스가 사용된다면, 상위 컴포넌트의 스타일이 하위 컴포넌트에도 영향을 끼칩니다. 이는 상위 컴포넌트에서 레이아웃을 위해 하위 컴포넌트에 영향을 미칠 수 있도록 디자인된 것입니다. 아래의 예시는 상위 컴포넌트의 <code class=\"language-text\">background</code>가 하위 컴포넌트에까지 영향을 미치는 예제입니다.</p>\n<div class=\"gatsby-highlight\" data-language=\"text\"><pre class=\"language-text\"><code class=\"language-text\">// parent.vue\n&lt;template&gt;\n  &lt;div class=&quot;wrapper&quot;&gt;\n    &lt;p&gt;parent&lt;/p&gt;\n    &lt;ChildMessageComponent/&gt;\n  &lt;/div&gt;\n&lt;/template&gt;\n\n&lt;script&gt;\nimport ChildMessageComponent from &quot;./components/child&quot;;\n\nexport default {\n  name: &quot;App&quot;,\n  components: {\n    ChildMessageComponent\n  }\n};\n&lt;/script&gt;\n\n&lt;style scoped&gt;\n.wrapper {\n  background: blue;\n}\n&lt;/style&gt;</code></pre></div>\n<div class=\"gatsby-highlight\" data-language=\"text\"><pre class=\"language-text\"><code class=\"language-text\">//child.vue\n&lt;template&gt;\n  &lt;div class=&quot;wrapper&quot;&gt;\n    &lt;p&gt;child&lt;/p&gt;\n  &lt;/div&gt;\n&lt;/template&gt;\n\n&lt;script&gt;\nexport default {\n  name: &quot;Hello, Scoped CSS&quot;,\n};\n&lt;/script&gt;\n&lt;style scoped&gt;\n.wrapper {\n  background: red;\n}\n&lt;/style&gt;</code></pre></div>\n<p>하위 컴포넌트의 <code class=\"language-text\">wrapper</code> 클래스의 배경색은 빨간색이 아니라 파란색이 됩니다.</p>\n<ol>\n<li>\n<h3 id=\"동적으로-생성된-컨텐츠에-범위-css를-적용시키는-방법은\" style=\"position:relative;\"><a href=\"#%EB%8F%99%EC%A0%81%EC%9C%BC%EB%A1%9C-%EC%83%9D%EC%84%B1%EB%90%9C-%EC%BB%A8%ED%85%90%EC%B8%A0%EC%97%90-%EB%B2%94%EC%9C%84-css%EB%A5%BC-%EC%A0%81%EC%9A%A9%EC%8B%9C%ED%82%A4%EB%8A%94-%EB%B0%A9%EB%B2%95%EC%9D%80\" aria-label=\"동적으로 생성된 컨텐츠에 범위 css를 적용시키는 방법은 permalink\" class=\"anchor-header before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>동적으로 생성된 컨텐츠에 범위 CSS를 적용시키는 방법은?</h3>\n<p>범위 CSS는 <code class=\"language-text\">v-html</code> 지시자로 동적으로 생성된 내용에 영향을 주지 않습니다. 이 경우, <code class=\"language-text\">deep</code> 선택자를 통해 문제를 해결할 수 있습니다.</p>\n</li>\n<li>\n<h3 id=\"vue에서-css-모듈을-사용할-수-있을까\" style=\"position:relative;\"><a href=\"#vue%EC%97%90%EC%84%9C-css-%EB%AA%A8%EB%93%88%EC%9D%84-%EC%82%AC%EC%9A%A9%ED%95%A0-%EC%88%98-%EC%9E%88%EC%9D%84%EA%B9%8C\" aria-label=\"vue에서 css 모듈을 사용할 수 있을까 permalink\" class=\"anchor-header before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Vue에서 CSS 모듈을 사용할 수 있을까?</h3>\n<p>CSS 모듈은 CSS를 모듈화하고 구성하는데 널리 사용되는 시스템입니다. <code class=\"language-text\">vue-loader</code>는 시뮬레이트된 범위 CSS의 대안으로 CSS 모듈과 함께 1급 클래스로의 통합을 제공합니다.</p>\n</li>\n<li>\n<h3 id=\"모든-템플릿에-대해-런타임-빌드를-할-수-있는가\" style=\"position:relative;\"><a href=\"#%EB%AA%A8%EB%93%A0-%ED%85%9C%ED%94%8C%EB%A6%BF%EC%97%90-%EB%8C%80%ED%95%B4-%EB%9F%B0%ED%83%80%EC%9E%84-%EB%B9%8C%EB%93%9C%EB%A5%BC-%ED%95%A0-%EC%88%98-%EC%9E%88%EB%8A%94%EA%B0%80\" aria-label=\"모든 템플릿에 대해 런타임 빌드를 할 수 있는가 permalink\" class=\"anchor-header before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>모든 템플릿에 대해 런타임 빌드를 할 수 있는가?</h3>\n<p>안 됩니다. Vue에서 사용되는 템플릿은 오직 <code class=\"language-text\">.vue</code> 파일에서만 사용되며, 다른 경우라면 <code class=\"language-text\">render</code> 함수가 필요합니다.</p>\n</li>\n<li>\n<h3 id=\"vue에서-css-모듈을-사용하는-방법은\" style=\"position:relative;\"><a href=\"#vue%EC%97%90%EC%84%9C-css-%EB%AA%A8%EB%93%88%EC%9D%84-%EC%82%AC%EC%9A%A9%ED%95%98%EB%8A%94-%EB%B0%A9%EB%B2%95%EC%9D%80\" aria-label=\"vue에서 css 모듈을 사용하는 방법은 permalink\" class=\"anchor-header before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Vue에서 CSS 모듈을 사용하는 방법은?</h3>\n<ol>\n<li>CSS 모듈 활성화: <code class=\"language-text\">webpack.config.js</code>의 <code class=\"language-text\">css-loader</code>에서 <code class=\"language-text\">modules: true</code> 옵션을 활성화해줍니다.</li>\n</ol>\n<div class=\"gatsby-highlight\" data-language=\"text\"><pre class=\"language-text\"><code class=\"language-text\">// webpack.config.js\n{\n module: {\n   rules: [\n     // ... other rules omitted\n     {\n       test: /\\.css$/,\n       use: [\n         &#39;vue-style-loader&#39;,\n         {\n           loader: &#39;css-loader&#39;,\n           options: {\n             // enable CSS Modules\n             modules: true,\n             // customize generated class names\n             localIdentName: &#39;[local]_[hash:base64:8]&#39;\n           }\n         }\n       ]\n     }\n   ]\n }\n}</code></pre></div>\n<ol>\n<li>모듈 속성 추가: <code class=\"language-text\">&lt;style&gt;</code> 태그에 <code class=\"language-text\">module</code> 속성을 추가합니다.</li>\n</ol>\n<div class=\"gatsby-highlight\" data-language=\"text\"><pre class=\"language-text\"><code class=\"language-text\">&lt;style module&gt;\n.customStyle {\n background: blue;\n}\n&lt;/style&gt;</code></pre></div>\n<ol>\n<li>CSS 모듈 주입: <code class=\"language-text\">computed</code> 속성인 <code class=\"language-text\">$style</code>을 통해 CSS 모듈을 객체로 접근할 수 있습니다.</li>\n</ol>\n<div class=\"gatsby-highlight\" data-language=\"text\"><pre class=\"language-text\"><code class=\"language-text\">&lt;template&gt;\n &lt;div :class=&quot;$style.blue&quot;&gt;\n   Background color should be in blue\n &lt;/p&gt;\n&lt;/template&gt;</code></pre></div>\n<p><code class=\"language-text\">:class</code>의 객체, 배열 문법에도 동작합니다.</p>\n</li>\n<li>\n<h3 id=\"css-모듈을-전처리기에서-사용할-수-있는가\" style=\"position:relative;\"><a href=\"#css-%EB%AA%A8%EB%93%88%EC%9D%84-%EC%A0%84%EC%B2%98%EB%A6%AC%EA%B8%B0%EC%97%90%EC%84%9C-%EC%82%AC%EC%9A%A9%ED%95%A0-%EC%88%98-%EC%9E%88%EB%8A%94%EA%B0%80\" aria-label=\"css 모듈을 전처리기에서 사용할 수 있는가 permalink\" class=\"anchor-header before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>CSS 모듈을 전처리기에서 사용할 수 있는가?</h3>\n<p>CSS 모듈을 전처리기에서 사용할 수 있습니다. 예를 들어, Sass 전처리기는 웹팩에서 아래와 같이 설정할 수 있습니다.</p>\n<div class=\"gatsby-highlight\" data-language=\"text\"><pre class=\"language-text\"><code class=\"language-text\">// webpack.config.js -&gt; module.rules\n{\n test: /\\.scss$/,\n use: [\n   &#39;vue-style-loader&#39;,\n   {\n     loader: &#39;css-loader&#39;,\n     options: { modules: true }\n   },\n   &#39;sass-loader&#39;\n ]\n}</code></pre></div>\n</li>\n<li>\n<h3 id=\"css-모듈에-사용자-정의의-이름을-사용할-수-있는가\" style=\"position:relative;\"><a href=\"#css-%EB%AA%A8%EB%93%88%EC%97%90-%EC%82%AC%EC%9A%A9%EC%9E%90-%EC%A0%95%EC%9D%98%EC%9D%98-%EC%9D%B4%EB%A6%84%EC%9D%84-%EC%82%AC%EC%9A%A9%ED%95%A0-%EC%88%98-%EC%9E%88%EB%8A%94%EA%B0%80\" aria-label=\"css 모듈에 사용자 정의의 이름을 사용할 수 있는가 permalink\" class=\"anchor-header before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>CSS 모듈에 사용자 정의의 이름을 사용할 수 있는가?</h3>\n<p>주입된 CSS 모듈에 <code class=\"language-text\">module</code> 속성을 부여해서, 모듈의 이름을 커스터마이징할 수 있습니다. <code class=\"language-text\">*.vue</code> 파일에서 둘 이상의 <code class=\"language-text\">&lt;style&gt;</code> 태그가 존재할 때, 스타일이 서로 덮어쓰지 않게 하는 데 유용합니다. 예를 들어, 아래와 같이 속성을 줄 수 있습니다.</p>\n<div class=\"gatsby-highlight\" data-language=\"text\"><pre class=\"language-text\"><code class=\"language-text\">&lt;style module=&quot;a&quot;&gt;\n /* identifiers injected as a */\n&lt;/style&gt;\n\n&lt;style module=&quot;b&quot;&gt;\n /* identifiers injected as b */\n&lt;/style&gt;</code></pre></div>\n</li>\n<li>\n<h3 id=\"핫-리로드hot-reload란\" style=\"position:relative;\"><a href=\"#%ED%95%AB-%EB%A6%AC%EB%A1%9C%EB%93%9Chot-reload%EB%9E%80\" aria-label=\"핫 리로드hot reload란 permalink\" class=\"anchor-header before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>핫 리로드(Hot Reload)란?</h3>\n<p>핫 리로드는 <code class=\"language-text\">*.vue</code> 파일을 편집할 때 단순히 페이지를 다시 로드하는 것이 아닙니다. 핫 리로드 기능을 사용하면 <code class=\"language-text\">*.vue</code> 파일을 편집할 때 해당 컴포넌트의 모든 인스턴스가 페이지를 리로딩하지 않고 변경됩니다. 심지어 앱의 현재 상태와 변경된 컴포넌트를 보존합니다. 이것은 템플릿 또는 컴포넌트의 스타일을 수정할 때 개발 환경이 크게 개선됩니다.</p>\n</li>\n<li>\n<h3 id=\"핫-리로드가-비활성화-될-때는\" style=\"position:relative;\"><a href=\"#%ED%95%AB-%EB%A6%AC%EB%A1%9C%EB%93%9C%EA%B0%80-%EB%B9%84%ED%99%9C%EC%84%B1%ED%99%94-%EB%90%A0-%EB%95%8C%EB%8A%94\" aria-label=\"핫 리로드가 비활성화 될 때는 permalink\" class=\"anchor-header before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>핫 리로드가 비활성화 될 때는?</h3>\n<p>핫 리로드는 아래의 상황에서는 비활성화 되어있습니다.</p>\n<ol>\n<li>웹팩의 <code class=\"language-text\">target</code>이 <code class=\"language-text\">node</code>일 때 (SSR)</li>\n<li>웹팩이 코드를 minify할 때</li>\n<li><code class=\"language-text\">process.env.NODE_ENV === &#39;production&#39;</code>일 때</li>\n</ol>\n</li>\n<li>\n<h3 id=\"핫-리로드를-명시적으로-비활성화하는-방법은\" style=\"position:relative;\"><a href=\"#%ED%95%AB-%EB%A6%AC%EB%A1%9C%EB%93%9C%EB%A5%BC-%EB%AA%85%EC%8B%9C%EC%A0%81%EC%9C%BC%EB%A1%9C-%EB%B9%84%ED%99%9C%EC%84%B1%ED%99%94%ED%95%98%EB%8A%94-%EB%B0%A9%EB%B2%95%EC%9D%80\" aria-label=\"핫 리로드를 명시적으로 비활성화하는 방법은 permalink\" class=\"anchor-header before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>핫 리로드를 명시적으로 비활성화하는 방법은?</h3>\n<p><code class=\"language-text\">hotReload: false</code> 옵션을 웹팩 로더에서 설정하면 됩니다.</p>\n<div class=\"gatsby-highlight\" data-language=\"text\"><pre class=\"language-text\"><code class=\"language-text\">module: {\n rules: [\n   {\n     test: /\\.vue$/,\n     loader: &#39;vue-loader&#39;,\n     options: {\n       hotReload: false // disables Hot Reload\n     }\n   }\n ]\n}</code></pre></div>\n</li>\n<li>\n<h3 id=\"핫-리로드를-활성화하는-방법은\" style=\"position:relative;\"><a href=\"#%ED%95%AB-%EB%A6%AC%EB%A1%9C%EB%93%9C%EB%A5%BC-%ED%99%9C%EC%84%B1%ED%99%94%ED%95%98%EB%8A%94-%EB%B0%A9%EB%B2%95%EC%9D%80\" aria-label=\"핫 리로드를 활성화하는 방법은 permalink\" class=\"anchor-header before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>핫 리로드를 활성화하는 방법은?</h3>\n<p><code class=\"language-text\">vue-loader</code> 플러그인은 내부적으로 핫 리로드를 사용하고 있습니다. 만약 <code class=\"language-text\">vue-cli</code>를 이용해 프로젝트를 시작했다면, 핫 리로드를 바로 사용할 수 있습니다. 만약 프로젝트를 직접 세팅했다면, <code class=\"language-text\">webpack-dev-server --hot</code>옵션으로 프로젝트를 시작해 활성화 할 수 있습니다.</p>\n</li>\n<li>\n<h3 id=\"핫-리로드에서-상태가-보존되는-규칙은\" style=\"position:relative;\"><a href=\"#%ED%95%AB-%EB%A6%AC%EB%A1%9C%EB%93%9C%EC%97%90%EC%84%9C-%EC%83%81%ED%83%9C%EA%B0%80-%EB%B3%B4%EC%A1%B4%EB%90%98%EB%8A%94-%EA%B7%9C%EC%B9%99%EC%9D%80\" aria-label=\"핫 리로드에서 상태가 보존되는 규칙은 permalink\" class=\"anchor-header before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>핫 리로드에서 상태가 보존되는 규칙은?</h3>\n<ol>\n<li>컴포넌트의 <code class=\"language-text\">&lt;template&gt;</code>을 수정할 때, 수정된 컴포넌트는 모든 상태를 보존한 채로 다시 렌더링됩니다.</li>\n<li>컴포넌트의 <code class=\"language-text\">&lt;script&gt;</code>를 수정할 때, 수정된 컴포넌트는 해체(destroy) 된 후 다시 생성(re-create)됩니다.</li>\n<li>컴포넌트의 <code class=\"language-text\">&lt;style&gt;</code>을 수정할 때, 핫 리로드는 <code class=\"language-text\">vue-style-loader</code>에 의해 실행되며 상태에 영향을 끼치지 않습니다.</li>\n</ol>\n</li>\n<li>\n<h3 id=\"vue-loader를-이용해-함수형-컴포넌트를-생성하는-방법은\" style=\"position:relative;\"><a href=\"#vue-loader%EB%A5%BC-%EC%9D%B4%EC%9A%A9%ED%95%B4-%ED%95%A8%EC%88%98%ED%98%95-%EC%BB%B4%ED%8F%AC%EB%84%8C%ED%8A%B8%EB%A5%BC-%EC%83%9D%EC%84%B1%ED%95%98%EB%8A%94-%EB%B0%A9%EB%B2%95%EC%9D%80\" aria-label=\"vue loader를 이용해 함수형 컴포넌트를 생성하는 방법은 permalink\" class=\"anchor-header before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Vue loader를 이용해 함수형 컴포넌트를 생성하는 방법은?</h3>\n<p><code class=\"language-text\">functional</code> 속성을 템플릿에 추가해 함수형 컴포넌트를 생성할 수 있습니다.</p>\n<div class=\"gatsby-highlight\" data-language=\"text\"><pre class=\"language-text\"><code class=\"language-text\">&lt;template functional&gt;\n  &lt;div&gt;{{ props.msg }}&lt;/div&gt;\n&lt;/template&gt;</code></pre></div>\n</li>\n<li>\n<h3 id=\"함수형-컴포넌트에서-전역-속성에-접근하는-방법은\" style=\"position:relative;\"><a href=\"#%ED%95%A8%EC%88%98%ED%98%95-%EC%BB%B4%ED%8F%AC%EB%84%8C%ED%8A%B8%EC%97%90%EC%84%9C-%EC%A0%84%EC%97%AD-%EC%86%8D%EC%84%B1%EC%97%90-%EC%A0%91%EA%B7%BC%ED%95%98%EB%8A%94-%EB%B0%A9%EB%B2%95%EC%9D%80\" aria-label=\"함수형 컴포넌트에서 전역 속성에 접근하는 방법은 permalink\" class=\"anchor-header before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>함수형 컴포넌트에서 전역 속성에 접근하는 방법은?</h3>\n<p><code class=\"language-text\">Vue.prototype</code>에 전역으로 정의된 속성에 접근해야 한다면, <code class=\"language-text\">parent</code> 속성을 이용해 접근할 수 있습니다.</p>\n<div class=\"gatsby-highlight\" data-language=\"text\"><pre class=\"language-text\"><code class=\"language-text\">&lt;template functional&gt;\n  &lt;div&gt;{{ parent.$someProperty }}&lt;/div&gt;\n&lt;/template&gt;</code></pre></div>\n</li>\n<li>\n<h3 id=\"vue에서-테스트-하는-방법은\" style=\"position:relative;\"><a href=\"#vue%EC%97%90%EC%84%9C-%ED%85%8C%EC%8A%A4%ED%8A%B8-%ED%95%98%EB%8A%94-%EB%B0%A9%EB%B2%95%EC%9D%80\" aria-label=\"vue에서 테스트 하는 방법은 permalink\" class=\"anchor-header before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Vue에서 테스트 하는 방법은?</h3>\n<ol>\n<li>vue-cli: 유닛 테스트와 e2e 테스트 환경이 미리 설정되어 제공됩니다.</li>\n<li>직접 세팅: <code class=\"language-text\">@vue/test-utils</code>에서 <code class=\"language-text\">mocha-webpack</code>이나 <code class=\"language-text\">jest</code>를 <code class=\"language-text\">*.vue</code> 파일을 대상으로 직접 설정합니다.</li>\n</ol>\n</li>\n<li>\n<h3 id=\"css에-lint를-설정하는-방법은\" style=\"position:relative;\"><a href=\"#css%EC%97%90-lint%EB%A5%BC-%EC%84%A4%EC%A0%95%ED%95%98%EB%8A%94-%EB%B0%A9%EB%B2%95%EC%9D%80\" aria-label=\"css에 lint를 설정하는 방법은 permalink\" class=\"anchor-header before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>CSS에 Lint를 설정하는 방법은?</h3>\n<p>Stylelint를 이용해 Vue의 싱글 파일 컴포넌트의 스타일 부분의 Lint를 설정할 수 있습니다. 특정 <code class=\"language-text\">.vue</code> 파일의 Lint는 아래와 같이 실행합니다.</p>\n<div class=\"gatsby-highlight\" data-language=\"text\"><pre class=\"language-text\"><code class=\"language-text\">stylelint MyComponent.vue</code></pre></div>\n<p>다른 방법은 웹팩에서 <code class=\"language-text\">stylelint-webpack-plugin</code>를 <code class=\"language-text\">dev-dependency</code>로 설치하고, 웹팩 설정에서 아래와 같이 설정하는 방법입니다.</p>\n<div class=\"gatsby-highlight\" data-language=\"text\"><pre class=\"language-text\"><code class=\"language-text\">// webpack.config.js\nconst StyleLintPlugin = require(&#39;stylelint-webpack-plugin&#39;);\nmodule.exports = {\n  // ... other options\n  plugins: [\n    new StyleLintPlugin({\n      files: [&#39;/*.{vue,htm,html,css,sss,less,scss,sass}&#39;],\n    })\n  ]\n}</code></pre></div>\n</li>\n<li>\n<h3 id=\"eslint-플러그인을-사용하는-방법은\" style=\"position:relative;\"><a href=\"#eslint-%ED%94%8C%EB%9F%AC%EA%B7%B8%EC%9D%B8%EC%9D%84-%EC%82%AC%EC%9A%A9%ED%95%98%EB%8A%94-%EB%B0%A9%EB%B2%95%EC%9D%80\" aria-label=\"eslint 플러그인을 사용하는 방법은 permalink\" class=\"anchor-header before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>eslint 플러그인을 사용하는 방법은?</h3>\n<p>공식 <code class=\"language-text\">eslint-plugin-vue</code> 플러그인은 Vue의 싱글 파일 컴포넌트의 템플릿과 스크립트 부분에 대해 Lint를 제공합니다.</p>\n<div class=\"gatsby-highlight\" data-language=\"text\"><pre class=\"language-text\"><code class=\"language-text\">// .eslintrc.js\nmodule.exports = {\n  extends: [\n    &quot;plugin:vue/essential&quot;\n  ]\n}</code></pre></div>\n<p>특정 파일에 대한 Lint는 아래와 같이 실행할 수 있습니다.</p>\n<div class=\"gatsby-highlight\" data-language=\"text\"><pre class=\"language-text\"><code class=\"language-text\">eslint --ext js,vue MyComponent.vue</code></pre></div>\n</li>\n<li>\n<h3 id=\"eslint-loader를-사용하는-이유는\" style=\"position:relative;\"><a href=\"#eslint-loader%EB%A5%BC-%EC%82%AC%EC%9A%A9%ED%95%98%EB%8A%94-%EC%9D%B4%EC%9C%A0%EB%8A%94\" aria-label=\"eslint loader를 사용하는 이유는 permalink\" class=\"anchor-header before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>eslint-loader를 사용하는 이유는?</h3>\n<p><code class=\"language-text\">eslint-loader</code>를 이용하면 개발 도중에 자동으로 <code class=\"language-text\">*.vue</code> 파일들에 대해 Lint를 적용시킬 수 있습니다.</p>\n<p>우선 아래와 같이 NPM 모듈을 설치해야 합니다.</p>\n<div class=\"gatsby-highlight\" data-language=\"text\"><pre class=\"language-text\"><code class=\"language-text\">npm install -D eslint eslint-loader</code></pre></div>\n<p>그 후 웹팩의 설정에 추가해야 합니다.</p>\n<div class=\"gatsby-highlight\" data-language=\"text\"><pre class=\"language-text\"><code class=\"language-text\">// webpack.config.js\nmodule.exports = {\n  // ... other options\n  module: {\n    rules: [\n      {\n        enforce: &#39;pre&#39;,\n        test: /\\.(js|vue)$/,\n        loader: &#39;eslint-loader&#39;,\n        exclude: /node_modules/\n      }\n    ]\n  }\n}</code></pre></div>\n<h3 id=\"css-단일-파일-추출이란\" style=\"position:relative;\"><a href=\"#css-%EB%8B%A8%EC%9D%BC-%ED%8C%8C%EC%9D%BC-%EC%B6%94%EC%B6%9C%EC%9D%B4%EB%9E%80\" aria-label=\"css 단일 파일 추출이란 permalink\" class=\"anchor-header before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>CSS 단일 파일 추출이란?</h3>\n<p>CSS 단일 파일 추출(CSS Extraction)은 모든 Vue 컴포넌트에서 사용된 CSS를 단일 CSS 파일로 추출하는 것을 의미합니다.</p>\n<div class=\"gatsby-highlight\" data-language=\"text\"><pre class=\"language-text\"><code class=\"language-text\">npm install -D mini-css-extract-plugin</code></pre></div>\n<p>그 후 웹팩의 설정에 추가해야 합니다.</p>\n<div class=\"gatsby-highlight\" data-language=\"javascript\"><pre class=\"language-javascript\"><code class=\"language-javascript\"><span class=\"token comment\">// webpack.config.js</span>\n<span class=\"token keyword\">var</span> MiniCssExtractPlugin <span class=\"token operator\">=</span> <span class=\"token function\">require</span><span class=\"token punctuation\">(</span><span class=\"token string\">'mini-css-extract-plugin'</span><span class=\"token punctuation\">)</span>\n\nmodule<span class=\"token punctuation\">.</span>exports <span class=\"token operator\">=</span> <span class=\"token punctuation\">{</span>\n  <span class=\"token comment\">// other options...</span>\n  module<span class=\"token operator\">:</span> <span class=\"token punctuation\">{</span>\n    rules<span class=\"token operator\">:</span> <span class=\"token punctuation\">[</span>\n      <span class=\"token comment\">// ... other rules omitted</span>\n      <span class=\"token punctuation\">{</span>\n        test<span class=\"token operator\">:</span> <span class=\"token regex\">/\\.css$/</span><span class=\"token punctuation\">,</span>\n        use<span class=\"token operator\">:</span> <span class=\"token punctuation\">[</span>\n          process<span class=\"token punctuation\">.</span>env<span class=\"token punctuation\">.</span><span class=\"token constant\">NODE_ENV</span> <span class=\"token operator\">!==</span> <span class=\"token string\">'production'</span>\n            <span class=\"token operator\">?</span> <span class=\"token string\">'vue-style-loader'</span>\n            <span class=\"token operator\">:</span> MiniCssExtractPlugin<span class=\"token punctuation\">.</span>loader<span class=\"token punctuation\">,</span>\n          <span class=\"token string\">'css-loader'</span>\n        <span class=\"token punctuation\">]</span>\n      <span class=\"token punctuation\">}</span>\n    <span class=\"token punctuation\">]</span>\n  <span class=\"token punctuation\">}</span><span class=\"token punctuation\">,</span>\n  plugins<span class=\"token operator\">:</span> <span class=\"token punctuation\">[</span>\n    <span class=\"token comment\">// ... Vue Loader plugin omitted</span>\n    <span class=\"token keyword\">new</span> <span class=\"token class-name\">MiniCssExtractPlugin</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">{</span>\n      filename<span class=\"token operator\">:</span> <span class=\"token string\">'style.css'</span>\n    <span class=\"token punctuation\">}</span><span class=\"token punctuation\">)</span>\n  <span class=\"token punctuation\">]</span>\n<span class=\"token punctuation\">}</span></code></pre></div>\n<h3 id=\"사용자-정의-블록이란\" style=\"position:relative;\"><a href=\"#%EC%82%AC%EC%9A%A9%EC%9E%90-%EC%A0%95%EC%9D%98-%EB%B8%94%EB%A1%9D%EC%9D%B4%EB%9E%80\" aria-label=\"사용자 정의 블록이란 permalink\" class=\"anchor-header before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>사용자 정의 블록이란?</h3>\n<p>사용자 정의 블록(Custom block)은 <code class=\"language-text\">*.vue</code> 파일에서 사용할 수 있는 <code class=\"language-text\">&lt;template&gt;</code>, <code class=\"language-text\">&lt;script&gt;</code>, <code class=\"language-text\">&lt;style&gt;</code> 태그 블록 이외의 블록을 정의하는 것을 말합니다. <code class=\"language-text\">lang</code> 속성, 태그 이름, 웹팩 설정의 <code class=\"language-text\">resourceQuery</code> 속성에 의해 정의할 수 있습니다. 아래 예시는 <code class=\"language-text\">*.vue</code> 파일에서 <code class=\"language-text\">&lt;message&gt;</code>로 정의된 태그를 찾는 방법입니다.</p>\n<div class=\"gatsby-highlight\" data-language=\"text\"><pre class=\"language-text\"><code class=\"language-text\">{\n  module: {\n    rules: [\n      {\n        resourceQuery: /blockType=message/,\n        loader: &#39;loader-to-use&#39;\n      }\n    ]\n  }\n}</code></pre></div>\n</li>\n<li>\n<h3 id=\"what-are-the-features-of-stylelint\" style=\"position:relative;\"><a href=\"#what-are-the-features-of-stylelint\" aria-label=\"what are the features of stylelint permalink\" class=\"anchor-header before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>What are the features of stylelint?</h3>\n<p>Below are the list of major stylelint features</p>\n<ol>\n<li>It has more than 160 built-in rules to catch errors, apply limits and enforce stylistic conventions</li>\n<li>Understands latest CSS syntax including custom properties and level 4 selectors</li>\n<li>It extracts embedded styles from HTML, markdown and CSS-in-JS object &#x26; template literals</li>\n<li>Parses CSS-like syntaxes like SCSS, Sass, Less and SugarSS</li>\n<li>Supports Plugins for reusing community plugins and creating own plugins</li>\n</ol>\n</li>\n<li>\n<h3 id=\"what-are-the-principles-for-vuex-application-structure\" style=\"position:relative;\"><a href=\"#what-are-the-principles-for-vuex-application-structure\" aria-label=\"what are the principles for vuex application structure permalink\" class=\"anchor-header before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>What are the principles for vuex application structure?</h3>\n<p>Vuex enforces below rules to structure any application.</p>\n<ol>\n<li>Application-level state is centralized in the store.</li>\n<li>The only way to mutate the state is by committing mutations, which are synchronous transactions.</li>\n<li>Asynchronous logic should be encapsulated in, and can be composed with actions. The project structure for any non-trivial application would be as below,</li>\n</ol>\n<p><img src=\"https://github.com/sudheerj/vuejs-interview-questions/raw/master/images/vuex-app-structure.png\" alt=\"img\"></p>\n</li>\n<li>\n<h3 id=\"is-vuex-supports-hot-reloading\" style=\"position:relative;\"><a href=\"#is-vuex-supports-hot-reloading\" aria-label=\"is vuex supports hot reloading permalink\" class=\"anchor-header before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Is Vuex supports hot reloading?</h3>\n<p>Yes, Vuex supports hot-reloading for mutations, modules, actions and getters during development. You need to use either webpack’s hot module replacement API or browserify’s hot module replacement plugin.</p>\n</li>\n<li>\n<h3 id=\"what-is-the-purpose-of-hotupdate-api-of-vuex-store\" style=\"position:relative;\"><a href=\"#what-is-the-purpose-of-hotupdate-api-of-vuex-store\" aria-label=\"what is the purpose of hotupdate api of vuex store permalink\" class=\"anchor-header before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>What is the purpose of hotUpdate API of vuex store?</h3>\n<p>The store.hotUpdate() API method is used for mutations and modules. For example, you need to configure vuex store as below,</p>\n<div class=\"gatsby-highlight\" data-language=\"text\"><pre class=\"language-text\"><code class=\"language-text\">// store.js\nimport Vue from &#39;vue&#39;\nimport Vuex from &#39;vuex&#39;\nimport mutations from &#39;./mutations&#39;\nimport myModule from &#39;./modules/myModule&#39;\n\nVue.use(Vuex)\n\nconst state = { message: &quot;Welcome to hot reloading&quot; }\n\nconst store = new Vuex.Store({\n  state,\n  mutations,\n  modules: {\n    moduleA: myModule\n  }\n})\n\nif (module.hot) {\n  // accept actions and mutations as hot modules\n  module.hot.accept([&#39;./mutations&#39;, &#39;./modules/newMyModule&#39;], () =&gt; {\n    // Get the updated modules\n    const newMutations = require(&#39;./mutations&#39;).default\n    const newMyModule = require(&#39;./modules/myModule&#39;).default\n    //swap in the new modules and mutations\n    store.hotUpdate({\n      mutations: newMutations,\n      modules: {\n        moduleA: newMyModule\n      }\n    })\n  })\n}</code></pre></div>\n</li>\n<li>\n<h3 id=\"mutations의-테스트\" style=\"position:relative;\"><a href=\"#mutations%EC%9D%98-%ED%85%8C%EC%8A%A4%ED%8A%B8\" aria-label=\"mutations의 테스트 permalink\" class=\"anchor-header before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>mutations의 테스트</h3>\n<p> mutations 는 단지 그들의 arguments에 전적으로 의존하는 함수이기 때문에 시험하기가 더 쉬울 것이다. store.js 파일 내에 mutations 를 유지해야 하며 기본 내보내기와는 별도로 명명된 내보내기로도 내보내야 합니다. </p>\n<div class=\"gatsby-highlight\" data-language=\"javascript\"><pre class=\"language-javascript\"><code class=\"language-javascript\"><span class=\"token comment\">// mutations.js</span>\n<span class=\"token keyword\">export</span> <span class=\"token keyword\">const</span> mutations <span class=\"token operator\">=</span> <span class=\"token punctuation\">{</span>\n  <span class=\"token function-variable function\">increment</span><span class=\"token operator\">:</span> <span class=\"token parameter\">state</span> <span class=\"token operator\">=></span> state<span class=\"token punctuation\">.</span>counter<span class=\"token operator\">++</span>\n<span class=\"token punctuation\">}</span></code></pre></div>\n<p>And test them using mocha and chai as below,</p>\n<div class=\"gatsby-highlight\" data-language=\"javascript\"><pre class=\"language-javascript\"><code class=\"language-javascript\"><span class=\"token comment\">// mutations.spec.js</span>\n<span class=\"token keyword\">import</span> <span class=\"token punctuation\">{</span> expect <span class=\"token punctuation\">}</span> <span class=\"token keyword\">from</span> <span class=\"token string\">'chai'</span>\n<span class=\"token keyword\">import</span> <span class=\"token punctuation\">{</span> mutations <span class=\"token punctuation\">}</span> <span class=\"token keyword\">from</span> <span class=\"token string\">'./store'</span>\n\n<span class=\"token comment\">// destructure assign `mutations`</span>\n<span class=\"token keyword\">const</span> <span class=\"token punctuation\">{</span> increment <span class=\"token punctuation\">}</span> <span class=\"token operator\">=</span> mutations\n\n<span class=\"token function\">describe</span><span class=\"token punctuation\">(</span><span class=\"token string\">'mutations'</span><span class=\"token punctuation\">,</span> <span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token operator\">=></span> <span class=\"token punctuation\">{</span>\n  <span class=\"token function\">it</span><span class=\"token punctuation\">(</span><span class=\"token string\">'INCREMENT'</span><span class=\"token punctuation\">,</span> <span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token operator\">=></span> <span class=\"token punctuation\">{</span>\n    <span class=\"token comment\">// mock state</span>\n    <span class=\"token keyword\">const</span> state <span class=\"token operator\">=</span> <span class=\"token punctuation\">{</span> counter<span class=\"token operator\">:</span> <span class=\"token number\">10</span> <span class=\"token punctuation\">}</span>\n    <span class=\"token comment\">// apply mutation</span>\n    <span class=\"token function\">increment</span><span class=\"token punctuation\">(</span>state<span class=\"token punctuation\">)</span>\n    <span class=\"token comment\">// assert result</span>\n    <span class=\"token function\">expect</span><span class=\"token punctuation\">(</span>state<span class=\"token punctuation\">.</span>counter<span class=\"token punctuation\">)</span><span class=\"token punctuation\">.</span>to<span class=\"token punctuation\">.</span><span class=\"token function\">equal</span><span class=\"token punctuation\">(</span><span class=\"token number\">11</span><span class=\"token punctuation\">)</span>\n  <span class=\"token punctuation\">}</span><span class=\"token punctuation\">)</span>\n<span class=\"token punctuation\">}</span><span class=\"token punctuation\">)</span></code></pre></div>\n</li>\n<li>\n<h3 id=\"how-do-you-test-your-getters\" style=\"position:relative;\"><a href=\"#how-do-you-test-your-getters\" aria-label=\"how do you test your getters permalink\" class=\"anchor-header before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>How do you test your getters?</h3>\n<p>It is easier to test getters similar to mutations. It is recommended to test these getters if they have complicated computation. Let’s take a simple todo filter as a getter</p>\n<div class=\"gatsby-highlight\" data-language=\"text\"><pre class=\"language-text\"><code class=\"language-text\">// getters.js\nexport const getters = {\n  filterTodos (state, status) {\n    return state.todos.filter(todo =&gt; {\n      return todo.status === status\n    })\n  }\n}</code></pre></div>\n<p>And the test case for above getter as follows,</p>\n<div class=\"gatsby-highlight\" data-language=\"text\"><pre class=\"language-text\"><code class=\"language-text\">// getters.spec.js\nimport { expect } from &#39;chai&#39;\nimport { getters } from &#39;./getters&#39;\n\ndescribe(&#39;getters&#39;, () =&gt; {\n  it(&#39;filteredTodos&#39;, () =&gt; {\n    // mock state\n    const state = {\n      todos: [\n        { id: 1, title: &#39;design&#39;, status: &#39;Completed&#39; },\n        { id: 2, title: &#39;testing&#39;, status: &#39;InProgress&#39; },\n        { id: 3, title: &#39;development&#39;, status: &#39;Completed&#39; }\n      ]\n    }\n    // mock getter\n    const filterStatus = &#39;Completed&#39;\n\n    // get the result from the getter\n    const result = getters.filterTodos(state, filterStatus)\n\n    // assert the result\n    expect(result).to.deep.equal([\n      { id: 1, title: &#39;design&#39;, status: &#39;Completed&#39; },\n      { id: 2, title: &#39;development&#39;, status: &#39;Completed&#39; }\n    ])\n  })\n})</code></pre></div>\n</li>\n<li>\n<h3 id=\"what-is-the-procedure-to-run-tests-in-node\" style=\"position:relative;\"><a href=\"#what-is-the-procedure-to-run-tests-in-node\" aria-label=\"what is the procedure to run tests in node permalink\" class=\"anchor-header before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>What is the procedure to run tests in node?</h3>\n<p>By proper mocking, you can bundle tests with webpack and run them on node without having depenceny on Browser API. It involves 2 steps,</p>\n<ol>\n<li>Create webpack config: Create webpack config with proper .babelrc</li>\n</ol>\n<div class=\"gatsby-highlight\" data-language=\"javascript\"><pre class=\"language-javascript\"><code class=\"language-javascript\"><span class=\"token comment\">// webpack.config.js</span>\nmodule<span class=\"token punctuation\">.</span>exports <span class=\"token operator\">=</span> <span class=\"token punctuation\">{</span>\n  entry<span class=\"token operator\">:</span> <span class=\"token string\">'./test.js'</span><span class=\"token punctuation\">,</span>\n  output<span class=\"token operator\">:</span> <span class=\"token punctuation\">{</span>\n    path<span class=\"token operator\">:</span> __dirname<span class=\"token punctuation\">,</span>\n    filename<span class=\"token operator\">:</span> <span class=\"token string\">'test-bundle.js'</span>\n  <span class=\"token punctuation\">}</span><span class=\"token punctuation\">,</span>\n  module<span class=\"token operator\">:</span> <span class=\"token punctuation\">{</span>\n    loaders<span class=\"token operator\">:</span> <span class=\"token punctuation\">[</span>\n      <span class=\"token punctuation\">{</span>\n        test<span class=\"token operator\">:</span> <span class=\"token regex\">/\\.js$/</span><span class=\"token punctuation\">,</span>\n        loader<span class=\"token operator\">:</span> <span class=\"token string\">'babel-loader'</span><span class=\"token punctuation\">,</span>\n        exclude<span class=\"token operator\">:</span> <span class=\"token regex\">/node_modules/</span>\n      <span class=\"token punctuation\">}</span>\n    <span class=\"token punctuation\">]</span>\n  <span class=\"token punctuation\">}</span>\n<span class=\"token punctuation\">}</span></code></pre></div>\n<ol>\n<li>Run testcases: First you need to bundle and then run them using mocha as below,</li>\n</ol>\n<div class=\"gatsby-highlight\" data-language=\"text\"><pre class=\"language-text\"><code class=\"language-text\">webpack\nmocha test-bundle.js</code></pre></div>\n</li>\n<li>\n<h3 id=\"what-is-the-procedure-to-run-tests-in-browser\" style=\"position:relative;\"><a href=\"#what-is-the-procedure-to-run-tests-in-browser\" aria-label=\"what is the procedure to run tests in browser permalink\" class=\"anchor-header before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>What is the procedure to run tests in browser?</h3>\n<p>Below are the steps to run tests in real browser,</p>\n<ol>\n<li>Install <code class=\"language-text\">mocha-loader</code>.</li>\n<li>Configure webpack config entry point to ‘mocha-loader!babel-loader!./test.js’.</li>\n<li>Start webpack-dev-server using the config.</li>\n<li>Go to localhost:8080/webpack-dev-server/test-bundle to see the test result</li>\n</ol>\n</li>\n<li>\n<h3 id=\"what-is-the-purpose-of-strict-mode-in-vuex\" style=\"position:relative;\"><a href=\"#what-is-the-purpose-of-strict-mode-in-vuex\" aria-label=\"what is the purpose of strict mode in vuex permalink\" class=\"anchor-header before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>What is the purpose of strict mode in vuex?</h3>\n<p>In strict mode, whenever Vuex state is mutated outside of mutation handlers, an error will be thrown. It make sure that all state mutations can be explicitly tracked by debugging tools. You can just enable this by passing <code class=\"language-text\">strict: true</code> while creating the vuex store.</p>\n<div class=\"gatsby-highlight\" data-language=\"javascript\"><pre class=\"language-javascript\"><code class=\"language-javascript\"><span class=\"token keyword\">const</span> store <span class=\"token operator\">=</span> <span class=\"token keyword\">new</span> <span class=\"token class-name\">Vuex<span class=\"token punctuation\">.</span>Store</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">{</span>\n  <span class=\"token comment\">// ...</span>\n  strict<span class=\"token operator\">:</span> <span class=\"token boolean\">true</span>\n<span class=\"token punctuation\">}</span><span class=\"token punctuation\">)</span></code></pre></div>\n</li>\n<li>\n<h3 id=\"can-i-use-strict-mode-in-production-environment\" style=\"position:relative;\"><a href=\"#can-i-use-strict-mode-in-production-environment\" aria-label=\"can i use strict mode in production environment permalink\" class=\"anchor-header before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Can I use strict mode in production environment?</h3>\n<p>No, it is not recommended to use strict mode in production environment. Strict mode runs a synchronous deep watcher on the state tree for detecting inappropriate mutations and it can be quite expensive when you perform large amount of mutations. i.e, It can impact performance if you enable in production mode. Hence it should be handled through build tools,</p>\n<div class=\"gatsby-highlight\" data-language=\"javascript\"><pre class=\"language-javascript\"><code class=\"language-javascript\"><span class=\"token keyword\">const</span> store <span class=\"token operator\">=</span> <span class=\"token keyword\">new</span> <span class=\"token class-name\">Vuex<span class=\"token punctuation\">.</span>Store</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">{</span>\n  <span class=\"token comment\">// ...</span>\n  strict<span class=\"token operator\">:</span> process<span class=\"token punctuation\">.</span>env<span class=\"token punctuation\">.</span><span class=\"token constant\">NODE_ENV</span> <span class=\"token operator\">!==</span> <span class=\"token string\">'production'</span>\n<span class=\"token punctuation\">}</span><span class=\"token punctuation\">)</span></code></pre></div>\n</li>\n<li>\n<h3 id=\"what-is-vuex-plugin\" style=\"position:relative;\"><a href=\"#what-is-vuex-plugin\" aria-label=\"what is vuex plugin permalink\" class=\"anchor-header before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>What is vuex plugin?</h3>\n<p>The vuex plugin is an option hat exposes hooks for each mutation. It is a normal function that receives the store as the only argument. You can create your own plugin or use built-in plugins. The plugin skeleton would be as below,</p>\n<div class=\"gatsby-highlight\" data-language=\"javascript\"><pre class=\"language-javascript\"><code class=\"language-javascript\"><span class=\"token keyword\">const</span> <span class=\"token function-variable function\">myPlugin</span> <span class=\"token operator\">=</span> <span class=\"token parameter\">store</span> <span class=\"token operator\">=></span> <span class=\"token punctuation\">{</span>\n  <span class=\"token comment\">// called when the store is initialized</span>\n  store<span class=\"token punctuation\">.</span><span class=\"token function\">subscribe</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">(</span><span class=\"token parameter\">mutation<span class=\"token punctuation\">,</span> state</span><span class=\"token punctuation\">)</span> <span class=\"token operator\">=></span> <span class=\"token punctuation\">{</span>\n    <span class=\"token comment\">// called after every mutation.</span>\n    <span class=\"token comment\">// The mutation comes in the format of `{ type, payload }`.</span>\n  <span class=\"token punctuation\">}</span><span class=\"token punctuation\">)</span>\n<span class=\"token punctuation\">}</span></code></pre></div>\n<p>After that plugin can be configured for plugins options as below,</p>\n<div class=\"gatsby-highlight\" data-language=\"javascript\"><pre class=\"language-javascript\"><code class=\"language-javascript\"><span class=\"token keyword\">const</span> store <span class=\"token operator\">=</span> <span class=\"token keyword\">new</span> <span class=\"token class-name\">Vuex<span class=\"token punctuation\">.</span>Store</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">{</span>\n  <span class=\"token comment\">// ...</span>\n  plugins<span class=\"token operator\">:</span> <span class=\"token punctuation\">[</span>myPlugin<span class=\"token punctuation\">]</span>\n<span class=\"token punctuation\">}</span><span class=\"token punctuation\">)</span></code></pre></div>\n</li>\n<li>\n<h3 id=\"how-do-you-mutate-state-in-plugins\" style=\"position:relative;\"><a href=\"#how-do-you-mutate-state-in-plugins\" aria-label=\"how do you mutate state in plugins permalink\" class=\"anchor-header before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>How do you mutate state in plugins?</h3>\n<p>Similar to components you can’t mutate state directly but they can trigger changes by by committing mutations. This way a plugin can be used to sync a data source to the store. For example, createWebSocketPlugin plugin is used to sync a websocket data source to the store.</p>\n<div class=\"gatsby-highlight\" data-language=\"javascript\"><pre class=\"language-javascript\"><code class=\"language-javascript\"><span class=\"token keyword\">export</span> <span class=\"token keyword\">default</span> <span class=\"token keyword\">function</span> <span class=\"token function\">createWebSocketPlugin</span> <span class=\"token punctuation\">(</span><span class=\"token parameter\">socket</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n  <span class=\"token keyword\">return</span> <span class=\"token parameter\">store</span> <span class=\"token operator\">=></span> <span class=\"token punctuation\">{</span>\n    socket<span class=\"token punctuation\">.</span><span class=\"token function\">on</span><span class=\"token punctuation\">(</span><span class=\"token string\">'data'</span><span class=\"token punctuation\">,</span> <span class=\"token parameter\">data</span> <span class=\"token operator\">=></span> <span class=\"token punctuation\">{</span>\n      store<span class=\"token punctuation\">.</span><span class=\"token function\">commit</span><span class=\"token punctuation\">(</span><span class=\"token string\">'receiveData'</span><span class=\"token punctuation\">,</span> data<span class=\"token punctuation\">)</span>\n    <span class=\"token punctuation\">}</span><span class=\"token punctuation\">)</span>\n    store<span class=\"token punctuation\">.</span><span class=\"token function\">subscribe</span><span class=\"token punctuation\">(</span><span class=\"token parameter\">mutation</span> <span class=\"token operator\">=></span> <span class=\"token punctuation\">{</span>\n      <span class=\"token keyword\">if</span> <span class=\"token punctuation\">(</span>mutation<span class=\"token punctuation\">.</span>type <span class=\"token operator\">===</span> <span class=\"token string\">'UPDATE_DATA'</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n        socket<span class=\"token punctuation\">.</span><span class=\"token function\">emit</span><span class=\"token punctuation\">(</span><span class=\"token string\">'update'</span><span class=\"token punctuation\">,</span> mutation<span class=\"token punctuation\">.</span>payload<span class=\"token punctuation\">)</span>\n      <span class=\"token punctuation\">}</span>\n    <span class=\"token punctuation\">}</span><span class=\"token punctuation\">)</span>\n  <span class=\"token punctuation\">}</span>\n<span class=\"token punctuation\">}</span></code></pre></div>\n<p>And then configure plugin in vuex store as below</p>\n<div class=\"gatsby-highlight\" data-language=\"javascript\"><pre class=\"language-javascript\"><code class=\"language-javascript\"><span class=\"token keyword\">const</span> plugin <span class=\"token operator\">=</span> <span class=\"token function\">createWebSocketPlugin</span><span class=\"token punctuation\">(</span>socket<span class=\"token punctuation\">)</span>\n\n<span class=\"token keyword\">const</span> store <span class=\"token operator\">=</span> <span class=\"token keyword\">new</span> <span class=\"token class-name\">Vuex<span class=\"token punctuation\">.</span>Store</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">{</span>\n  state<span class=\"token punctuation\">,</span>\n  mutations<span class=\"token punctuation\">,</span>\n  plugins<span class=\"token operator\">:</span> <span class=\"token punctuation\">[</span>plugin<span class=\"token punctuation\">]</span>\n<span class=\"token punctuation\">}</span><span class=\"token punctuation\">)</span></code></pre></div>\n</li>\n<li>\n<h3 id=\"what-is-vuex-store\" style=\"position:relative;\"><a href=\"#what-is-vuex-store\" aria-label=\"what is vuex store permalink\" class=\"anchor-header before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>What is vuex store?</h3>\n<p>A Vuex “store” is basically a container that holds your application state. The store creation is pretty straightforward. Below are the list of instructions to use vuex in an increment application,</p>\n<ol>\n<li>Configure vuex in vuejs ecosystem</li>\n</ol>\n<div class=\"gatsby-highlight\" data-language=\"javascript\"><pre class=\"language-javascript\"><code class=\"language-javascript\"><span class=\"token keyword\">import</span> Vuex <span class=\"token keyword\">from</span> <span class=\"token string\">\"vuex\"</span><span class=\"token punctuation\">;</span>\nVue<span class=\"token punctuation\">.</span><span class=\"token function\">use</span><span class=\"token punctuation\">(</span>Vuex<span class=\"token punctuation\">)</span></code></pre></div>\n<ol>\n<li>Provide an initial state object and some mutations</li>\n</ol>\n<div class=\"gatsby-highlight\" data-language=\"javascript\"><pre class=\"language-javascript\"><code class=\"language-javascript\"><span class=\"token comment\">// Make sure to call Vue.use(Vuex) first if using a module system</span>\n\n<span class=\"token keyword\">const</span> store <span class=\"token operator\">=</span> <span class=\"token keyword\">new</span> <span class=\"token class-name\">Vuex<span class=\"token punctuation\">.</span>Store</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">{</span>\n  state<span class=\"token operator\">:</span> <span class=\"token punctuation\">{</span>\n    count<span class=\"token operator\">:</span> <span class=\"token number\">0</span>\n  <span class=\"token punctuation\">}</span><span class=\"token punctuation\">,</span>\n  mutations<span class=\"token operator\">:</span> <span class=\"token punctuation\">{</span>\n    <span class=\"token function\">increment</span> <span class=\"token punctuation\">(</span><span class=\"token parameter\">state</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n      state<span class=\"token punctuation\">.</span>count<span class=\"token operator\">++</span>\n    <span class=\"token punctuation\">}</span>\n  <span class=\"token punctuation\">}</span>\n<span class=\"token punctuation\">}</span><span class=\"token punctuation\">)</span></code></pre></div>\n<ol>\n<li>Trigger state change with commit and access state variables,</li>\n</ol>\n<div class=\"gatsby-highlight\" data-language=\"javascript\"><pre class=\"language-javascript\"><code class=\"language-javascript\">store<span class=\"token punctuation\">.</span><span class=\"token function\">commit</span><span class=\"token punctuation\">(</span><span class=\"token string\">'increment'</span><span class=\"token punctuation\">)</span>\n\nconsole<span class=\"token punctuation\">.</span><span class=\"token function\">log</span><span class=\"token punctuation\">(</span>store<span class=\"token punctuation\">.</span>state<span class=\"token punctuation\">.</span>count<span class=\"token punctuation\">)</span> <span class=\"token comment\">// -> 1</span></code></pre></div>\n</li>\n<li>\n<p>vuex 스토어와 일반 글로벌 객체의 차이</p>\n<ol>\n<li>Vuex 스토어는 반응성 : 스토어의 상태가 변경되면 vue 구성 요소가 반응성 및 효율적으로 업데이트됩니다.</li>\n<li>스토어 상태를 직접 변경할 수 없:  모든 상태 변경이 툴링 목적으로 추적 가능한 기록을 남길 수 있도록 mutations를 명시적으로 commit 하면서 스토어의 상태가 변경됩니다.</li>\n</ol>\n</li>\n<li>\n<h3 id=\"what-is-the-reason-not-to-update-the-state-directly\" style=\"position:relative;\"><a href=\"#what-is-the-reason-not-to-update-the-state-directly\" aria-label=\"what is the reason not to update the state directly permalink\" class=\"anchor-header before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>What is the reason not to update the state directly?</h3>\n<p>We want to explicitly track application state in order to implement tools that can log every mutation, take state snapshots, or even perform time travel debugging. So we need to commit a mutation instead of changing store’s state directly.</p>\n</li>\n<li>\n<h3 id=\"what-is-single-state-tree\" style=\"position:relative;\"><a href=\"#what-is-single-state-tree\" aria-label=\"what is single state tree permalink\" class=\"anchor-header before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>What is Single state tree?</h3>\n<p>Vuex’s single state tree is single object contains all your application level state and serves as the “single source of truth”. It does not conflict with modularity when you split state and mutations into sub modules.</p>\n</li>\n<li>\n<h3 id=\"how-do-you-install-vuex\" style=\"position:relative;\"><a href=\"#how-do-you-install-vuex\" aria-label=\"how do you install vuex permalink\" class=\"anchor-header before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>How do you install vuex?</h3>\n<p>You can install vuex using npm or yarn as below,</p>\n<div class=\"gatsby-highlight\" data-language=\"text\"><pre class=\"language-text\"><code class=\"language-text\">npm install vuex --save\n(or)\nyarn add vuex</code></pre></div>\n<p>In a module system, you must explicitly install Vuex via Vue.use()</p>\n<div class=\"gatsby-highlight\" data-language=\"text\"><pre class=\"language-text\"><code class=\"language-text\">import Vue from &#39;vue&#39;\nimport Vuex from &#39;vuex&#39;\n\nVue.use(Vuex)</code></pre></div>\n<p>(OR) You can also install it using CDN links such as unpkg.cpm which provides NPM-based CDN links. Just include vuex after Vue and it will install itself automatically.</p>\n<div class=\"gatsby-highlight\" data-language=\"text\"><pre class=\"language-text\"><code class=\"language-text\">&lt;script src=&quot;https://unpkg.com/vue.js&quot;&gt;&lt;/script&gt;\n&lt;script src=&quot;https://unpkg.com/vuex.js&quot;&gt;&lt;/script&gt;</code></pre></div>\n<p>Note: You can use a specific version/tag via URLs like <a href=\"https://unpkg.com/vuex@2.0.0\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">https://unpkg.com/vuex@2.0.0</a>. If you don’t mention any version then it will point to latest version.</p>\n</li>\n<li>\n<h3 id=\"do-i-need-promise-for-vuex\" style=\"position:relative;\"><a href=\"#do-i-need-promise-for-vuex\" aria-label=\"do i need promise for vuex permalink\" class=\"anchor-header before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Do I need promise for vuex?</h3>\n<p>Yes, Vuex requires Promise. If your supporting browsers do not implement Promise (e.g. IE), you can use a polyfill library, such as es6-promise using npm or yarn.</p>\n<div class=\"gatsby-highlight\" data-language=\"text\"><pre class=\"language-text\"><code class=\"language-text\">npm install es6-promise --save # NPM\nyarn add es6-promise # Yarn</code></pre></div>\n<p>After that import into anywhere in your application,</p>\n<div class=\"gatsby-highlight\" data-language=\"text\"><pre class=\"language-text\"><code class=\"language-text\">import &#39;es6-promise/auto&#39;</code></pre></div>\n</li>\n<li>\n<h3 id=\"how-do-you-display-store-state-in-vue-components\" style=\"position:relative;\"><a href=\"#how-do-you-display-store-state-in-vue-components\" aria-label=\"how do you display store state in vue components permalink\" class=\"anchor-header before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>How do you display store state in vue components?</h3>\n<p>Since Vuex stores are reactive, you can retrieve” state from store by simply returning store’s state from within a computed property. i.e, Whenever store state changes, it will cause the computed property to re-evaluate, and trigger associated DOM updates. Let’s take a hello word component which display store’s state in the template,</p>\n<div class=\"gatsby-highlight\" data-language=\"text\"><pre class=\"language-text\"><code class=\"language-text\">// let&#39;s create a hello world component\nconst Greeting = {\n  template: `&lt;div&gt;{{ greet }}&lt;/div&gt;`,\n  computed: {\n    greet () {\n      return store.state.msg\n    }\n  }\n}</code></pre></div>\n</li>\n<li>\n<h3 id=\"how-do-you-inject-store-into-child-components\" style=\"position:relative;\"><a href=\"#how-do-you-inject-store-into-child-components\" aria-label=\"how do you inject store into child components permalink\" class=\"anchor-header before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>How do you inject store into child components?</h3>\n<p>Vuex provides a mechanism to “inject” the store into all child components from the root component with the store option. It will be enabled by vue.use(vuex). For example, let’s inject into our app component as below,</p>\n<div class=\"gatsby-highlight\" data-language=\"text\"><pre class=\"language-text\"><code class=\"language-text\">const app = new Vue({\n  el: &#39;#app&#39;,\n  // provide the store using the &quot;store&quot; option.\n  // this will inject the store instance to all child components.\n  store,\n  components: { Greeting },\n  template: `\n    &lt;div class=&quot;app&quot;&gt;\n      &lt;greeting&gt;&lt;/greeting&gt;\n    &lt;/div&gt;\n  `\n})</code></pre></div>\n<p>Now the store will be injected into all child components of the root and will be available on them as this.$store</p>\n<div class=\"gatsby-highlight\" data-language=\"text\"><pre class=\"language-text\"><code class=\"language-text\"> // let&#39;s create a hello world component\n     const Greeting = {\n       template: `&lt;div&gt;{{ greet }}&lt;/div&gt;`,\n       computed: {\n         greet () {\n           return this.$store.state.msg\n         }\n       }\n     }</code></pre></div>\n</li>\n<li>\n<h3 id=\"what-is-mapstate-helper\" style=\"position:relative;\"><a href=\"#what-is-mapstate-helper\" aria-label=\"what is mapstate helper permalink\" class=\"anchor-header before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>What is mapState helper?</h3>\n<p>In Vuex application, creating a computed property every time whenever we want to access the store’s state property or getter is going to be repetitive and verbose, especially if a component needs more than one state property. In this case, we can make use of the mapState helper of vuex which generates computed getter functions for us. Let’s take an increment example to demonstrate mapState helper,</p>\n<div class=\"gatsby-highlight\" data-language=\"text\"><pre class=\"language-text\"><code class=\"language-text\">// in full builds helpers are exposed as Vuex.mapState\nimport { mapState } from &#39;vuex&#39;\n\nexport default {\n  // ...\n  computed: mapState({\n    // arrow functions can make the code very succinct!\n    username: state =&gt; state.username,\n\n    // passing the string value &#39;username&#39; is same as `state =&gt; state.username`\n    usernameAlias: &#39;username&#39;,\n\n    // to access local state with `this`, a normal function must be used\n     greeting (state) {\n      return this.localTitle + state.username\n    }\n  })\n}</code></pre></div>\n<p>We can also pass a string array to mapState when the name of a mapped computed property is the same as a state sub tree name</p>\n<div class=\"gatsby-highlight\" data-language=\"text\"><pre class=\"language-text\"><code class=\"language-text\">computed: mapState([\n  // map this.username to store.state.username\n  &#39;username&#39;\n])</code></pre></div>\n</li>\n<li>\n<h3 id=\"how-do-you-combine-local-computed-properties-with-mapstate-helper\" style=\"position:relative;\"><a href=\"#how-do-you-combine-local-computed-properties-with-mapstate-helper\" aria-label=\"how do you combine local computed properties with mapstate helper permalink\" class=\"anchor-header before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>How do you combine local computed properties with mapState helper?</h3>\n<p>You can use object spread operator syntax in order to combine mapState helper(which returns an object) with other local computed properties. This way it simplify merging techniques using utilities.</p>\n<div class=\"gatsby-highlight\" data-language=\"text\"><pre class=\"language-text\"><code class=\"language-text\">computed: {\n  localComputed () { /* ... */ },\n  // mix this into the outer object with the object spread operator\n  ...mapState({\n    // ...\n  })\n}</code></pre></div>\n</li>\n<li>\n<h3 id=\"do-you-need-to-replace-entire-local-state-with-vuex\" style=\"position:relative;\"><a href=\"#do-you-need-to-replace-entire-local-state-with-vuex\" aria-label=\"do you need to replace entire local state with vuex permalink\" class=\"anchor-header before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Do you need to replace entire local state with vuex?</h3>\n<p>No, if a piece of state strictly belongs to a single component, it could be just fine leaving it as local state. i.e, Eventhough vuex used in the application, it doesn’t mean that you need to keep all the local state in vuex store. Other the code becomes more verbose and indirect although it makes your state mutations more explicit and debuggable.</p>\n</li>\n<li>\n<h3 id=\"what-are-vuex-getters\" style=\"position:relative;\"><a href=\"#what-are-vuex-getters\" aria-label=\"what are vuex getters permalink\" class=\"anchor-header before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>What are vuex getters??</h3>\n<p>Vuex getters acts as computed properties for stores to compute derived state based on store state. Similar to computed properties, a getter’s result is cached based on its dependencies, and will only re-evaluate when some of its dependencies have changed. Let’s take a todo example which as completedTodos getter to find all completed todos,</p>\n<div class=\"gatsby-highlight\" data-language=\"text\"><pre class=\"language-text\"><code class=\"language-text\">const store = new Vuex.Store({\n  state: {\n    todos: [\n      { id: 1, text: &#39;Vue course&#39;, completed: true },\n      { id: 2, text: &#39;Vuex course&#39;, completed: false },\n      { id: 2, text: &#39;Vue Router course&#39;, completed: true }\n    ]\n  },\n  getters: {\n    completedTodos: state =&gt; {\n      return state.todos.filter(todo =&gt; todo.completed)\n    }\n  }\n})</code></pre></div>\n<p>Note:Getters receive state as first argument.</p>\n</li>\n<li>\n<h3 id=\"what-is-a-property-style-access\" style=\"position:relative;\"><a href=\"#what-is-a-property-style-access\" aria-label=\"what is a property style access permalink\" class=\"anchor-header before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>What is a property style access?</h3>\n<p>You can access values of store’s getter object(store.getters) as properties. This is known as property style access. For example, you can access todo’s status as a property,</p>\n<div class=\"gatsby-highlight\" data-language=\"text\"><pre class=\"language-text\"><code class=\"language-text\">store.getters.todosStatus</code></pre></div>\n<p>The getters can be passed as 2nd argument for other getters. For example, you can derive completed todo’s count based on their status as below,</p>\n<div class=\"gatsby-highlight\" data-language=\"text\"><pre class=\"language-text\"><code class=\"language-text\">getters: {\n  completedTodosCount: (state, getters) =&gt; {\n    return getters.todosStatus === &#39;completed&#39;\n  }\n}</code></pre></div>\n<p>Note: The getters accessed as properties are cached as part of Vue’s reactivity system.</p>\n</li>\n<li>\n<h3 id=\"what-is-a-method-style-access\" style=\"position:relative;\"><a href=\"#what-is-a-method-style-access\" aria-label=\"what is a method style access permalink\" class=\"anchor-header before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>What is a method style access?</h3>\n<p>You can access store’s state in a method style by passing arguments. For example, you can pass user id to find user profile information as below,</p>\n<div class=\"gatsby-highlight\" data-language=\"text\"><pre class=\"language-text\"><code class=\"language-text\">getters: {\n  getUserProfileById: (state) =&gt; (id) =&gt; {\n    return state.users.find(user =&gt; user.id === id)\n  }\n}</code></pre></div>\n<p>After that you can access it as a method call,</p>\n<div class=\"gatsby-highlight\" data-language=\"text\"><pre class=\"language-text\"><code class=\"language-text\">store.getters.getUserProfileById(111); {id: &#39;111&#39;, name: &#39;John&#39;, age: 33}</code></pre></div>\n</li>\n<li>\n<h3 id=\"what-is-mapgetter-helper\" style=\"position:relative;\"><a href=\"#what-is-mapgetter-helper\" aria-label=\"what is mapgetter helper permalink\" class=\"anchor-header before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>What is mapGetter helper??</h3>\n<p>The mapGetters is a helper that simply maps store getters to local computed properties. For example, the usage of getters for todo app would be as below,</p>\n<div class=\"gatsby-highlight\" data-language=\"text\"><pre class=\"language-text\"><code class=\"language-text\">import { mapGetters } from &#39;vuex&#39;\n\nexport default {\n  computed: {\n    // mix the getters into computed with object spread operator\n    ...mapGetters([\n      &#39;completedTodos&#39;,\n      &#39;todosCount&#39;,\n      // ...\n    ])\n  }\n}</code></pre></div>\n</li>\n<li>\n<h3 id=\"what-are-mutations\" style=\"position:relative;\"><a href=\"#what-are-mutations\" aria-label=\"what are mutations permalink\" class=\"anchor-header before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>What are mutations?</h3>\n<p>Vuex mutations are similar to any events with a string <code class=\"language-text\">type</code> and a <code class=\"language-text\">handler</code>. The handler function is where we perform actual state modifications, and it will receive the state as the first argument. For example, the counter example with increment mutation would be as below,</p>\n<div class=\"gatsby-highlight\" data-language=\"text\"><pre class=\"language-text\"><code class=\"language-text\">const store = new Vuex.Store({\n  state: {\n    count: 0\n  },\n  mutations: {\n    increment (state) {\n      // mutate state\n      state.count++\n    }\n  }\n})</code></pre></div>\n<p>You can’t directly invoke mutation instead you need to call <code class=\"language-text\">store.commit</code> with its type. The above mutation would be triggered as folows</p>\n<div class=\"gatsby-highlight\" data-language=\"text\"><pre class=\"language-text\"><code class=\"language-text\">store.commit(&#39;increment&#39;)</code></pre></div>\n</li>\n<li>\n<h3 id=\"how-do-you-commit-with-payload\" style=\"position:relative;\"><a href=\"#how-do-you-commit-with-payload\" aria-label=\"how do you commit with payload permalink\" class=\"anchor-header before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>How do you commit with payload?</h3>\n<p>You can also pass payload for the mutation as an additional argument to <code class=\"language-text\">store.commit</code>. For example, the counter mutation with payload object would be as below,</p>\n<div class=\"gatsby-highlight\" data-language=\"text\"><pre class=\"language-text\"><code class=\"language-text\">mutations: {\n  increment (state, payload) {\n    state.count += payload.increment\n  }\n}</code></pre></div>\n<p>And then you can trigger increment commit</p>\n<div class=\"gatsby-highlight\" data-language=\"text\"><pre class=\"language-text\"><code class=\"language-text\">store.commit(&#39;increment&#39;, {\n  increment: 20\n})</code></pre></div>\n<p>Note: You can also pass primitives as payload.</p>\n</li>\n<li>\n<h3 id=\"what-is-object-style-commit\" style=\"position:relative;\"><a href=\"#what-is-object-style-commit\" aria-label=\"what is object style commit permalink\" class=\"anchor-header before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>What is object style commit?</h3>\n<p>You can also commit a mutation is by directly using an object that has a type property.</p>\n<div class=\"gatsby-highlight\" data-language=\"text\"><pre class=\"language-text\"><code class=\"language-text\">store.commit({\n  type: &#39;increment&#39;,\n  value: 20\n})</code></pre></div>\n<p>Now the entire object will be passed as the payload to mutation handlers(i.e, without any changes to handler signature).</p>\n<div class=\"gatsby-highlight\" data-language=\"text\"><pre class=\"language-text\"><code class=\"language-text\">mutations: {\n  increment (state, payload) {\n    state.count += payload.value\n  }\n}</code></pre></div>\n</li>\n<li>\n<h3 id=\"what-are-the-caveats-with-vuex-mutations\" style=\"position:relative;\"><a href=\"#what-are-the-caveats-with-vuex-mutations\" aria-label=\"what are the caveats with vuex mutations permalink\" class=\"anchor-header before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>What are the caveats with vuex mutations?</h3>\n<p>Since a Vuex store’s state is made reactive by Vue, the same reactivity caveats of vue will apply to vuex mutations. These are the rules should be followed for vuex mutations,</p>\n<ol>\n<li>It is recommended to initialize store’s initial state with all desired fields upfront</li>\n<li>Add new properties to state Object either by set method or object spread syntax</li>\n</ol>\n<div class=\"gatsby-highlight\" data-language=\"text\"><pre class=\"language-text\"><code class=\"language-text\">Vue.set(stateObject, &#39;newProperty&#39;, &#39;John&#39;)</code></pre></div>\n<p>(OR)</p>\n<div class=\"gatsby-highlight\" data-language=\"text\"><pre class=\"language-text\"><code class=\"language-text\">state.stateObject = { ...state.stateObject, newProperty: &#39;John&#39; }</code></pre></div>\n</li>\n<li>\n<h3 id=\"why-mutations-should-be-synchronous\" style=\"position:relative;\"><a href=\"#why-mutations-should-be-synchronous\" aria-label=\"why mutations should be synchronous permalink\" class=\"anchor-header before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Why mutations should be synchronous?</h3>\n<p>You need to remember that mutation handler functions must be synchronous. This is why because any state mutation performed in the callback is essentially un-trackable. It is going to be problematic when the devtool will need to capture a “before” and “after” snapshots of the state during the mutations.</p>\n<div class=\"gatsby-highlight\" data-language=\"text\"><pre class=\"language-text\"><code class=\"language-text\">mutations: {\n  someMutation (state) {\n    api.callAsyncMethod(() =&gt; {\n      state.count++\n    })\n  }\n}</code></pre></div>\n</li>\n<li>\n<h3 id=\"how-do-you-perform-mutations-in-components\" style=\"position:relative;\"><a href=\"#how-do-you-perform-mutations-in-components\" aria-label=\"how do you perform mutations in components permalink\" class=\"anchor-header before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>How do you perform mutations in components?</h3>\n<p>You can commit mutations in components with either this.$store.commit(‘mutation name’) or mapMutations helper to map component methods to store.commit calls. For example, the usage of mapMutations helper on counter example would be as below,</p>\n<div class=\"gatsby-highlight\" data-language=\"text\"><pre class=\"language-text\"><code class=\"language-text\">import { mapMutations } from &#39;vuex&#39;\n\nexport default {\n  methods: {\n    ...mapMutations([\n      &#39;increment&#39;, // map `this.increment()` to `this.$store.commit(&#39;increment&#39;)`\n\n      // `mapMutations` also supports payloads:\n      &#39;incrementBy&#39; // map `this.incrementBy(amount)` to `this.$store.commit(&#39;incrementBy&#39;, amount)`\n    ]),\n    ...mapMutations({\n      add: &#39;increment&#39; // map `this.add()` to `this.$store.commit(&#39;increment&#39;)`\n    })\n  }\n}</code></pre></div>\n</li>\n<li>\n<h3 id=\"is-it-mandatory-to-use-constants-for-mutation-types\" style=\"position:relative;\"><a href=\"#is-it-mandatory-to-use-constants-for-mutation-types\" aria-label=\"is it mandatory to use constants for mutation types permalink\" class=\"anchor-header before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Is it mandatory to use constants for mutation types?</h3>\n<p>No, it is not mandatory. But you might observed that State management implementations such Flux and Redux use constants for mutation types. This convention is just a preference and useful to take advantage of tooling like linters, and putting all constants in a single file allows your collaborators to get an at-a-glance view of what mutations are possible in the entire application. For example, the mutations can be declared as below,</p>\n<div class=\"gatsby-highlight\" data-language=\"text\"><pre class=\"language-text\"><code class=\"language-text\">// mutation-types.js\nexport const SOME_MUTATION = &#39;SOME_MUTATION&#39;</code></pre></div>\n<p>And you can configure them in store as follows,</p>\n<div class=\"gatsby-highlight\" data-language=\"text\"><pre class=\"language-text\"><code class=\"language-text\">// store.js\nimport Vuex from &#39;vuex&#39;\nimport { SOME_MUTATION } from &#39;./mutation-types&#39;\n\nconst store = new Vuex.Store({\n  state: { ... },\n  mutations: {\n    // ES2015 computed property name feature to use a constant as the function name\n    [SOME_MUTATION] (state) {\n      // mutate state\n    }\n  }\n})</code></pre></div>\n</li>\n<li>\n<h3 id=\"how-do-you-perform-asynchronous-operations\" style=\"position:relative;\"><a href=\"#how-do-you-perform-asynchronous-operations\" aria-label=\"how do you perform asynchronous operations permalink\" class=\"anchor-header before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>How do you perform asynchronous operations?</h3>\n<p>In Vuex, mutations are synchronous transactions. But if you want to handle asynchronous operations then you should use actions.</p>\n</li>\n<li>\n<p>mutations와 actions의 차이점</p>\n<p>\\1. Mutations는 state에서 mutations를 일으키고, actions는 commit를 mutations\n\\2. Actions에는 mutations와 달리 임의적인 비동기 작업이 포함될 수 있습니다.</p>\n</li>\n</ol>","tableOfContents":"<ul>\n<li><a href=\"/%ED%94%84%EB%A1%A0%ED%8A%B8%EC%97%94%EB%93%9C%20%EA%B0%9C%EB%B0%9C%EC%9E%90%20%EB%A9%B4%EC%A0%91%20%EC%A7%88%EB%AC%B8(%EA%B8%B0%EC%88%A0%EB%A9%B4%EC%A0%91)%20%EC%A7%88%EB%AC%B8%20%EC%A0%95%EB%A6%AC%20%EB%AA%A8%EC%9D%8C%20-%20Vue(1)/#vuejs-loader%EB%8A%94-%EB%AC%B4%EC%97%87%EC%9E%85%EB%8B%88%EA%B9%8C\">vuejs loader는 무엇입니까?</a></li>\n<li><a href=\"/%ED%94%84%EB%A1%A0%ED%8A%B8%EC%97%94%EB%93%9C%20%EA%B0%9C%EB%B0%9C%EC%9E%90%20%EB%A9%B4%EC%A0%91%20%EC%A7%88%EB%AC%B8(%EA%B8%B0%EC%88%A0%EB%A9%B4%EC%A0%91)%20%EC%A7%88%EB%AC%B8%20%EC%A0%95%EB%A6%AC%20%EB%AA%A8%EC%9D%8C%20-%20Vue(1)/#%EC%9B%B9%ED%8C%A9%EC%97%90%EC%84%9C-vue-loader%EB%A5%BC-%EC%84%A4%EC%A0%95%ED%95%98%EB%8A%94-%EB%B0%A9%EB%B2%95%EC%9D%80\">웹팩에서 vue loader를 설정하는 방법은?</a></li>\n<li><a href=\"/%ED%94%84%EB%A1%A0%ED%8A%B8%EC%97%94%EB%93%9C%20%EA%B0%9C%EB%B0%9C%EC%9E%90%20%EB%A9%B4%EC%A0%91%20%EC%A7%88%EB%AC%B8(%EA%B8%B0%EC%88%A0%EB%A9%B4%EC%A0%91)%20%EC%A7%88%EB%AC%B8%20%EC%A0%95%EB%A6%AC%20%EB%AA%A8%EC%9D%8C%20-%20Vue(1)/#vue-loader%EC%9D%98-asset-url-%ED%95%B8%EB%93%A4%EB%A7%81-%EA%B7%9C%EC%B9%99%EC%9D%80\">vue-loader의 Asset URL 핸들링 규칙은?</a></li>\n<li><a href=\"/%ED%94%84%EB%A1%A0%ED%8A%B8%EC%97%94%EB%93%9C%20%EA%B0%9C%EB%B0%9C%EC%9E%90%20%EB%A9%B4%EC%A0%91%20%EC%A7%88%EB%AC%B8(%EA%B8%B0%EC%88%A0%EB%A9%B4%EC%A0%91)%20%EC%A7%88%EB%AC%B8%20%EC%A0%95%EB%A6%AC%20%EB%AA%A8%EC%9D%8C%20-%20Vue(1)/#vue-loader%EC%97%90%EC%84%9C-%EC%A0%84%EC%B2%98%EB%A6%AC%EA%B8%B0%EB%A5%BC-%EC%82%AC%EC%9A%A9%ED%95%98%EB%8A%94-%EA%B2%BD%EC%9A%B0%EB%9D%BC%EB%A9%B4\">vue loader에서 전처리기를 사용하는 경우라면?</a></li>\n<li><a href=\"/%ED%94%84%EB%A1%A0%ED%8A%B8%EC%97%94%EB%93%9C%20%EA%B0%9C%EB%B0%9C%EC%9E%90%20%EB%A9%B4%EC%A0%91%20%EC%A7%88%EB%AC%B8(%EA%B8%B0%EC%88%A0%EB%A9%B4%EC%A0%91)%20%EC%A7%88%EB%AC%B8%20%EC%A0%95%EB%A6%AC%20%EB%AA%A8%EC%9D%8C%20-%20Vue(1)/#%EB%B2%94%EC%9C%84-cssscoped-css%EB%9E%80\">범위 CSS(Scoped CSS)란?</a></li>\n<li><a href=\"/%ED%94%84%EB%A1%A0%ED%8A%B8%EC%97%94%EB%93%9C%20%EA%B0%9C%EB%B0%9C%EC%9E%90%20%EB%A9%B4%EC%A0%91%20%EC%A7%88%EB%AC%B8(%EA%B8%B0%EC%88%A0%EB%A9%B4%EC%A0%91)%20%EC%A7%88%EB%AC%B8%20%EC%A0%95%EB%A6%AC%20%EB%AA%A8%EC%9D%8C%20-%20Vue(1)/#%EB%B2%94%EC%9C%84-css%EC%99%80-%EC%A0%84%EC%97%AD-css%EB%A5%BC-%ED%95%A8%EA%BB%98-%EC%93%B8-%EC%88%98-%EC%9E%88%EC%9D%84%EA%B9%8C\">범위 CSS와 전역 CSS를 함께 쓸 수 있을까?</a></li>\n<li><a href=\"/%ED%94%84%EB%A1%A0%ED%8A%B8%EC%97%94%EB%93%9C%20%EA%B0%9C%EB%B0%9C%EC%9E%90%20%EB%A9%B4%EC%A0%91%20%EC%A7%88%EB%AC%B8(%EA%B8%B0%EC%88%A0%EB%A9%B4%EC%A0%91)%20%EC%A7%88%EB%AC%B8%20%EC%A0%95%EB%A6%AC%20%EB%AA%A8%EC%9D%8C%20-%20Vue(1)/#%EB%B2%94%EC%9C%84-css%EA%B0%80-%EC%9E%90%EC%8B%9D-%EC%BB%B4%ED%8F%AC%EB%84%8C%ED%8A%B8%EC%97%90-%EC%98%81%ED%96%A5%EC%9D%84-%EB%AF%B8%EC%B9%98%EA%B2%8C-%ED%95%98%EB%8A%94-%EB%B0%A9%EB%B2%95%EC%9D%80\">범위 CSS가 자식 컴포넌트에 영향을 미치게 하는 방법은?</a></li>\n<li><a href=\"/%ED%94%84%EB%A1%A0%ED%8A%B8%EC%97%94%EB%93%9C%20%EA%B0%9C%EB%B0%9C%EC%9E%90%20%EB%A9%B4%EC%A0%91%20%EC%A7%88%EB%AC%B8(%EA%B8%B0%EC%88%A0%EB%A9%B4%EC%A0%91)%20%EC%A7%88%EB%AC%B8%20%EC%A0%95%EB%A6%AC%20%EB%AA%A8%EC%9D%8C%20-%20Vue(1)/#%EC%83%81%EC%9C%84-%EC%BB%B4%ED%8F%AC%EB%84%8C%ED%8A%B8%EC%9D%98-%EB%B2%94%EC%9C%84-css%EA%B0%80-%ED%95%98%EC%9C%84-%EC%BB%B4%ED%8F%AC%EB%84%8C%ED%8A%B8%EC%97%90-%EC%98%81%ED%96%A5%EC%9D%84-%EC%A3%BC%EB%8A%94%EA%B0%80\">상위 컴포넌트의 범위 CSS가 하위 컴포넌트에 영향을 주는가?</a></li>\n</ul>","frontmatter":{"title":"프론트엔드 개발자 면접 질문(기술면접) 질문 정리 모음 - Vue","path":"/프론트엔드 개발자 면접 질문(기술면접) 질문 정리 모음 - Vue/","images":["images/2.jpg"],"category":"기술 면접","tags":["프론트엔드","개발자","면접","기술면접","Vue"],"date":"2021-04-15T01:00:00.000Z","components":null,"tweets":null,"summary":"프론트엔드 개발자 면접 질문(기술면접) 질문 정리 모음 - Vue"}},"posts":{"edges":[{"node":{"frontmatter":{"type":"portfolio","title":"MOIJA","images":["moija/images/moija.png","moija/images/moija1.png","moija/images/moija2.png","moija/images/moija3.png","moija/images/moija4.png","moija/images/moija5.png"],"path":"/portfolios/moija/","tags":null,"date":"2022-03-02T00:00:00.000Z","summary":null}}},{"node":{"frontmatter":{"type":"portfolio","title":"VUELOG","images":["vuelog/images/vuelog.png","vuelog/images/vuelog1.png","vuelog/images/vuelog2.png","vuelog/images/vuelog3.png","vuelog/images/vuelog4.png","vuelog/images/vuelog5.png","vuelog/images/vuelog6.png"],"path":"/portfolios/VUELOG/","tags":null,"date":"2022-03-01T00:00:00.000Z","summary":null}}},{"node":{"frontmatter":{"type":"portfolio","title":"DT CENTER","images":["dtcenter/images/dtcenter.png","dtcenter/images/dtcenter1.png","dtcenter/images/dtcenter2.png","dtcenter/images/dtcenter3.png"],"path":"/portfolios/DT CENTER/","tags":null,"date":"2022-02-21T00:00:00.000Z","summary":null}}},{"node":{"frontmatter":{"type":"portfolio","title":"COLORBERRY","images":["ColorBerry/images/colorberry.png","ColorBerry/images/colorberry2.png","ColorBerry/images/colorberry3.png","ColorBerry/images/colorberry4.png","ColorBerry/images/colorberry5.png","ColorBerry/images/colorberry6.png","ColorBerry/images/colorberry7.png","ColorBerry/images/colorberry8.png"],"path":"/portfolios/COLORBERRY/","tags":null,"date":"2022-02-20T00:00:00.000Z","summary":null}}},{"node":{"frontmatter":{"type":null,"title":"[2020] 정보 처리 기사 실기 요약","images":["images/1.jpg"],"path":"/[2020] 정보 처리 기사 실기 요약/","tags":["정보처리기사 실기","정보처리기사","정처기"],"date":"2021-0417T09:24:00000Z","summary":"[2020] 정보 처리 기사 실기 요약 입니다 정처기 공부를 할 때 활용하세요"}}},{"node":{"frontmatter":{"type":null,"title":"벡엔드 개발자 면접 질문(기술면접) 질문 정리 모음 - node","images":["images/2.jpg"],"path":"/벡엔드 개발자 면접 질문(기술면접) 질문 정리 모음 - node/","tags":["벡엔드","개발자","면접","기술면접","node"],"date":"2021-04-20T01:00:00.000Z","summary":"벡엔드 개발자 면접 질문(기술면접) 질문 정리 모음 - node"}}},{"node":{"frontmatter":{"type":null,"title":"프론트엔드 개발자 면접 질문(기술면접) 질문 정리 모음 - Vue","images":["images/2.jpg"],"path":"/프론트엔드 개발자 면접 질문(기술면접) 질문 정리 모음 - Vue/","tags":["프론트엔드","개발자","면접","기술면접","Vue"],"date":"2021-04-15T01:00:00.000Z","summary":"프론트엔드 개발자 면접 질문(기술면접) 질문 정리 모음 - Vue"}}},{"node":{"frontmatter":{"type":null,"title":"프론트엔드 개발자 면접 질문(기술면접) 질문 정리 모음 - Vue(1)","images":["images/2.jpg"],"path":"/프론트엔드 개발자 면접 질문(기술면접) 질문 정리 모음 - Vue(1)/","tags":["프론트엔드","개발자","면접","기술면접","Vue"],"date":"2021-04-15T01:00:00.000Z","summary":"프론트엔드 개발자 면접 질문(기술면접) 질문 정리 모음 - Vue(1)"}}},{"node":{"frontmatter":{"type":null,"title":"프론트엔드 개발자 면접 질문(기술면접) 질문 정리 모음 - CSS","images":["images/2.jpg"],"path":"/프론트엔드 개발자 면접 질문(기술면접) 질문 정리 모음 - CSS/","tags":["프론트엔드","개발자","면접","기술면접","CSS"],"date":"2021-04-14T01:00:00.000Z","summary":"프론트엔드 개발자 면접 질문(기술면접) 질문 정리 모음 - CSS"}}},{"node":{"frontmatter":{"type":null,"title":"프론트엔드 개발자 면접 질문(기술면접) 질문 정리 모음 - React","images":["images/2.jpg"],"path":"/프론트엔드 개발자 면접 질문(기술면접) 질문 정리 모음 - React/","tags":["프론트엔드","개발자","면접","기술면접","React"],"date":"2021-04-14T01:00:00.000Z","summary":"프론트엔드 개발자 면접 질문(기술면접) 질문 정리 모음 - React"}}},{"node":{"frontmatter":{"type":null,"title":"RxJs 정리","images":["images/2.jpg"],"path":"/RxJs 정리/","tags":["벡엔드","개발자","프론트엔드","기술면접","RxJs"],"date":"2021-04-09T01:00:00.000Z","summary":"RxJs 정리"}}},{"node":{"frontmatter":{"type":null,"title":"벡엔드 개발자 면접 질문(기술면접) 질문 정리 모음 - 기술스택","images":["images/2.jpg"],"path":"/벡엔드 개발자 면접 질문(기술면접) 질문 정리 모음 - 기술스택/","tags":["벡엔드","개발자","면접","기술면접","기술스택"],"date":"2021-04-09T01:00:00.000Z","summary":"벡엔드 개발자 면접 질문(기술면접) 질문 정리 모음 - 기술스택"}}},{"node":{"frontmatter":{"type":null,"title":"벡엔드 개발자 면접 질문(기술면접) 질문 정리 모음 - CS","images":["images/2.jpg"],"path":"/벡엔드 개발자 면접 질문(기술면접) 질문 정리 모음 - cs/","tags":["벡엔드","개발자","면접","기술면접","CS"],"date":"2021-04-08T01:00:00.000Z","summary":"프론트엔드 개발자 면접 질문(기술면접) 질문 정리 모음 - 자바스크립트 파트"}}},{"node":{"frontmatter":{"type":null,"title":"three.js 공부","images":["images/2.jpg"],"path":"/three.js 공부/","tags":["프론트엔드","개발자","면접","기술면접","자바스크립트"],"date":"2021-04-07T01:00:00.000Z","summary":"three.js 공부"}}},{"node":{"frontmatter":{"type":null,"title":"프론트엔드 개발자 면접 질문(기술면접) 질문 정리 모음 - 자바스크립트(1)","images":["images/2.jpg"],"path":"/프론트엔드 개발자 면접 질문(기술면접) 질문 정리 모음 - 자바스크립트(1)/","tags":["프론트엔드","개발자","면접","기술면접","자바스크립트"],"date":"2021-04-07T01:00:00.000Z","summary":"프론트엔드 개발자 면접 질문(기술면접) 질문 정리 모음 - 자바스크립트(1) 파트"}}},{"node":{"frontmatter":{"type":null,"title":"프론트엔드 개발자 면접 질문(기술면접) 질문 정리 모음 - 자바스크립트(2)","images":["images/2.jpg"],"path":"/프론트엔드 개발자 면접 질문(기술면접) 질문 정리 모음 - 자바스크립트(2)/","tags":["프론트엔드","개발자","면접","기술면접","자바스크립트"],"date":"2021-04-07T01:00:00.000Z","summary":"프론트엔드 개발자 면접 질문(기술면접) 질문 정리 모음 - 자바스크립트(2) 파트"}}},{"node":{"frontmatter":{"type":null,"title":"react 공부","images":["images/1.jpg"],"path":"/react 공부/","tags":["react.js","프론트엔드"],"date":"2021-04-05T12:23:00.000Z","summary":"react 공부"}}},{"node":{"frontmatter":{"type":null,"title":"vue 공부 1일차","images":["images/1.jpg"],"path":"/vue공부1일차/","tags":["vue.js","프론트엔드"],"date":"2021-04-04T12:23:00.000Z","summary":"vue 공부 1일차"}}},{"node":{"frontmatter":{"type":null,"title":"vue 공부 1일차","images":["images/1.jpg"],"path":"/vue공부1일차/","tags":["vue.js","프론트엔드"],"date":"2021-04-04T12:23:00.000Z","summary":"vue 공부 1일차"}}},{"node":{"frontmatter":{"type":null,"title":"history api 정리","images":["images/1.jpg"],"path":"/history api 정리/","tags":["네트워크 관리사 2급","자격증","소프트웨어"],"date":"2021-03-03T12:23:00.000Z","summary":"history api 정리"}}},{"node":{"frontmatter":{"type":null,"title":"프로그래머스 데브매칭 고양이 정리","images":["images/1.jpg"],"path":"/프로그래머스 데브매칭 고양이 정리/","tags":["네트워크 관리사 2급","자격증","소프트웨어"],"date":"2021-03-01T12:23:00.000Z","summary":"프로그래머스 데브매칭 고양이 정리입니다."}}},{"node":{"frontmatter":{"type":"portfolio","title":"ANGULOG","images":["angulog/images/angulog.png","angulog/images/angulog2.png","angulog/images/angulog3.png","angulog/images/angulog4.png","angulog/images/angulog5.png","angulog/images/angulog6.png"],"path":"/portfolios/ANGULOG/","tags":null,"date":"2021-02-23T00:00:00.000Z","summary":null}}},{"node":{"frontmatter":{"type":"portfolio","title":"MBTI WORLD","images":["mbtiworld/images/mbtiworld.png","mbtiworld/images/mbtiworld2.png","mbtiworld/images/mbtiworld3.png","mbtiworld/images/mbtiworld4.png","mbtiworld/images/mbtiworld5.png","mbtiworld/images/mbtiworld6.png","mbtiworld/images/mbtiworld7.png","mbtiworld/images/mbtiworld8.png","mbtiworld/images/mbtiworld9.png","mbtiworld/images/mbtiworld10.png"],"path":"/portfolios/MBTI WORLD/","tags":null,"date":"2021-02-19T00:00:00.000Z","summary":null}}},{"node":{"frontmatter":{"type":null,"title":"[2020] 네트워크 관리사 2급 실기 요점 정리 - 리눅스_TCPIP_신경향","images":["images/1.jpg"],"path":"/[2020] 네트워크 관리사 2급 실기 요점 정리 - 리눅스_TCPIP_신경향/","tags":["네트워크 관리사 2급","자격증","소프트웨어"],"date":"2021-01-02T12:01:00.000Z","summary":"[2020] 네트워크 관리사 2급 실기 요점 정리 - 리눅스_TCPIP_신경향입니다."}}},{"node":{"frontmatter":{"type":null,"title":"[2020] 네트워크 관리사 2급 실기 요점 정리 - 라우터","images":["images/1.jpg"],"path":"/[2020] 네트워크 관리사 2급 실기 요점 정리 - 라우터/","tags":["네트워크 관리사 2급","자격증","소프트웨어"],"date":"2021-01-01T12:23:00.000Z","summary":"[2020] 네트워크 관리사 2급 실기 요점 정리 - 라우터입니다."}}},{"node":{"frontmatter":{"type":null,"title":"[2020] 네트워크 관리사 2급 실기 요점 정리 - 정리","images":["images/1.jpg"],"path":"/[2020] 네트워크 관리사 2급 실기 요점 정리 - 정리/","tags":["네트워크 관리사 2급","자격증","소프트웨어"],"date":"2021-01-01T12:23:00.000Z","summary":"[2020] 네트워크 관리사 2급 실기 요점 정리 - 정리입니다."}}},{"node":{"frontmatter":{"type":null,"title":"[2020] 네트워크 관리사 2급 실기 요점 정리 - 윈도우 서버","images":["images/1.jpg"],"path":"/[2020] 네트워크 관리사 2급 실기 요점 정리 - 윈도우 서버/","tags":["네트워크 관리사 2급","자격증","소프트웨어"],"date":"2021-01-01T12:21:00.000Z","summary":"[2020] 네트워크 관리사 2급 실기 요점 정리 - 윈도우 서버입니다."}}},{"node":{"frontmatter":{"type":null,"title":"[2020] 리눅스 마스터 2급 2차 요점 정리","images":["images/1.jpg"],"path":"/[2020] 리눅스 마스터 2급 2차 요점 정리 - 리눅스 일반/","tags":["리눅스 마스터 2급","자격증","소프트웨어"],"date":"2020-12-03T12:21:00.000Z","summary":"[2020] 리눅스 마스터 2급 2차 (1) 리눅스 일반 요점 정리입니다."}}},{"node":{"frontmatter":{"type":null,"title":"[2020] 정보 처리 기사 실기 16-단답형 문제(4)","images":["images/1.jpg"],"path":"/[2020] 정보 처리 기사 실기 16-단답형 문제(4)/","tags":["정보처리기사 실기","정보처리기사","정처기"],"date":"2020-10-15T09:24:00000Z","summary":"[2020] 정보 처리 기사 실기 16-단답형 문제(4)입니다 정처기 공부를 할 때 활용하세요"}}},{"node":{"frontmatter":{"type":null,"title":"[2020] 정보 처리 기사 실기 15-단답형 문제(3)","images":["images/1.jpg"],"path":"/[2020] 정보 처리 기사 실기 15-단답형 문제(3)/","tags":["정보처리기사 실기","정보처리기사","정처기"],"date":"2020-10-15T09:22:00000Z","summary":"[2020] 정보 처리 기사 실기 15-단답형 문제(3)입니다 정처기 공부를 할 때 활용하세요"}}},{"node":{"frontmatter":{"type":null,"title":"[2020] 정보 처리 기사 실기 14-단답형 문제(2)","images":["images/1.jpg"],"path":"/[2020] 정보 처리 기사 실기 14-단답형 문제(2)/","tags":["정보처리기사 실기","정보처리기사","정처기"],"date":"2020-10-15T09:21:00000Z","summary":"[2020] 정보 처리 기사 실기 14-단답형 문제(2)입니다 정처기 공부를 할 때 활용하세요"}}},{"node":{"frontmatter":{"type":null,"title":"[2020] 정보 처리 기사 실기 13-단답형 문제(1)","images":["images/1.jpg"],"path":"/[2020] 정보 처리 기사 실기 13-단답형 문제(1)/","tags":["정보처리기사 실기","정보처리기사","정처기"],"date":"2020-10-14T16:21:00000Z","summary":"[2020] 정보 처리 기사 실기 13-단답형 문제(1)입니다 정처기 공부를 할 때 활용하세요"}}},{"node":{"frontmatter":{"type":null,"title":"[2020] 정보 처리 기사 실기 12-정보 용어 정리","images":["images/1.jpg"],"path":"/[2020] 정보 처리 기사 실기 12-정보 용어 정리/","tags":["정보처리기사 실기","정보처리기사","정처기"],"date":"2020-10-14T02:21:00.000Z","summary":"2020 정보 처리 기사 실기 12-정보 용어 정리 요약 입니다. 정처기 공부를 할 때 활용하세요."}}},{"node":{"frontmatter":{"type":null,"title":"[2020] 정보 처리 기사 실기 11-제품 소프트웨어 패키징","images":["images/1.jpg"],"path":"/[2020] 정보 처리 기사 실기 11-제품 소프트웨어 패키징/","tags":["정보처리기사 실기","정보처리기사","정처기"],"date":"2020-07-17T23:03:00.000Z","summary":"2020 정보 처리 기사 제품 소프트웨어 패키징 입니다. 정처기 공부를 할 때 활용하세요."}}},{"node":{"frontmatter":{"type":null,"title":"[2020] 정보 처리 기사 실기 10-응용 SW 기초 기술 활용(3)","images":["images/1.jpg"],"path":"/[2020] 정보 처리 기사 실기 10-응용 SW 기초 기술 활용(3)/","tags":["정보처리기사 실기","정보처리기사","정처기"],"date":"2020-07-17T21:03:00.000Z","summary":"2020 정보 처리 기사 응용 SW 기초 기술 활용 입니다. 정처기 공부를 할 때 활용하세요."}}},{"node":{"frontmatter":{"type":null,"title":"[2020] 정보 처리 기사 실기 10-응용 SW 기초 기술 활용(2)","images":["images/1.jpg"],"path":"/[2020] 정보 처리 기사 실기 10-응용 SW 기초 기술 활용(2)/","tags":["정보처리기사 실기","정보처리기사","정처기"],"date":"2020-07-17T21:02:00.000Z","summary":"2020 정보 처리 기사 응용 SW 기초 기술 활용 입니다. 정처기 공부를 할 때 활용하세요."}}},{"node":{"frontmatter":{"type":null,"title":"[2020] 정보 처리 기사 실기 10-응용 SW 기초 기술 활용(1)","images":["images/1.jpg"],"path":"/[2020] 정보 처리 기사 실기 10-응용 SW 기초 기술 활용(1)/","tags":["정보처리기사 실기","정보처리기사","정처기"],"date":"2020-07-17T21:01:00.000Z","summary":"2020 정보 처리 기사 응용 SW 기초 기술 활용 입니다. 정처기 공부를 할 때 활용하세요."}}},{"node":{"frontmatter":{"type":null,"title":"[2020] 정보 처리 기사 실기 9-소프트웨어 보안 구축","images":["images/1.jpg"],"path":"/[2020] 정보 처리 기사 실기 9-소프트웨어 보안 구축/","tags":["정보처리기사 실기","정보처리기사","정처기"],"date":"2020-07-17T19:00:00.000Z","summary":"2020 정보 처리 기사 소프트웨어 보안 구축 입니다. 정처기 공부를 할 때 활용하세요."}}},{"node":{"frontmatter":{"type":null,"title":"[2020] 정보 처리 기사 실기 8-SQL 응용","images":["images/1.jpg"],"path":"/[2020] 정보 처리 기사 실기 8-SQL 응용/","tags":["정보처리기사 실기","정보처리기사","정처기"],"date":"2020-07-17T12:45:00.000Z","summary":"2020 정보 처리 기사 SQL 응용 요약 입니다. 정처기 공부를 할 때 활용하세요."}}},{"node":{"frontmatter":{"type":null,"title":"[2020] 정보 처리 기사 실기 6-화면 설계","images":["images/1.jpg"],"path":"/[2020] 정보 처리 기사 실기 6-화면 설계/","tags":["정보처리기사 실기","정보처리기사","정처기"],"date":"2020-07-16T17:00:00.000Z","summary":"2020 정보 처리 기사 화면 설계 요약 입니다. 정처기 공부를 할 때 활용하세요."}}},{"node":{"frontmatter":{"type":null,"title":"[2020] 정보 처리 기사 실기 7-애플리케이션 테스트 관리","images":["images/1.jpg"],"path":"/[2020] 정보 처리 기사 실기 7-애플리케이션 테스트 관리/","tags":["정보처리기사 실기","정보처리기사","정처기"],"date":"2020-07-16T17:00:00.000Z","summary":"2020 정보 처리 기사 애플리케이션 테스트 관리 요약 입니다. 정처기 공부를 할 때 활용하세요."}}},{"node":{"frontmatter":{"type":null,"title":"[2020] 정보 처리 기사 실기 5-서버 프로그램 구현","images":["images/1.jpg"],"path":"/[2020] 정보 처리 기사 실기 5-서버 프로그램 구현/","tags":["정보처리기사 실기","정보처리기사","정처기"],"date":"2020-07-16T06:31:00.000Z","summary":"2020 정보 처리 기사 서버 프로그램 구현 요약 입니다. 정처기 공부를 할 때 활용하세요."}}},{"node":{"frontmatter":{"type":null,"title":"[2020] 정보 처리 기사 실기 4-통합 구현","images":["images/1.jpg"],"path":"/[2020] 정보 처리 기사 실기 4-통합 구현/","tags":["정보처리기사 실기","정보처리기사","정처기"],"date":"2020-07-16T05:31:00.000Z","summary":"2020 정보 처리 기사 통합 구현 요약 입니다. 정처기 공부를 할 때 활용하세요."}}},{"node":{"frontmatter":{"type":null,"title":"[2020] 정보 처리 기사 실기 3-데이터 입출력 구현","images":["images/1.jpg"],"path":"/[2020] 정보 처리 기사 실기 3-데이터 입출력 구현/","tags":["정보처리기사 실기","정보처리기사","정처기"],"date":"2020-07-15T17:22:00.000Z","summary":"2020 정보 처리 기사 데이터 입출력 구현 요약 입니다. 정처기 공부를 할 때 활용하세요."}}},{"node":{"frontmatter":{"type":null,"title":"[2020] 정보 처리 기사 실기 2-요구 사항 확인","images":["images/1.jpg"],"path":"/[2020] 정보 처리 기사 실기 2-요구 사항 확인/","tags":["정보처리기사 실기","정보처리기사","정처기"],"date":"2020-07-15T17:21:00.000Z","summary":"2020 정보 처리 기사 요구 사항 확인 요약 입니다. 정처기 공부를 할 때 활용하세요."}}},{"node":{"frontmatter":{"type":null,"title":"[파이썬] itertools 에 대해서 알아보자","images":["images/4.jpg"],"path":"/[파이썬] itertools 에 대해서 알아보자/","tags":["파이썬","itertools","알고리즘"],"date":"2020-07-15T17:00:00.000Z","summary":"파이썬으로 순열, 조합을 빠르게 구해주는 라이브러리"}}},{"node":{"frontmatter":{"type":null,"title":"[2020] 정보 처리 기사 실기 1-프로그래밍 언어 활용(3)","images":["images/1.jpg"],"path":"/[2020] 정보 처리 기사 실기 1-프로그래밍 언어 활용(3)/","tags":["정보처리기사 실기","정보처리기사","정처기"],"date":"2020-07-11T22:23:00.000Z","summary":"2020 정보 처리 기사 프로그래밍 언어 활용 요약 입니다. 정처기 공부를 할 때 활용하세요."}}},{"node":{"frontmatter":{"type":null,"title":"[2020] 정보 처리 기사 실기 1-프로그래밍 언어 활용(2)","images":["images/1.jpg"],"path":"/[2020] 정보 처리 기사 실기 1-프로그래밍 언어 활용(2)/","tags":["정보처리기사 실기","정보처리기사","정처기"],"date":"2020-07-11T22:21:00.000Z","summary":"2020 정보 처리 기사 프로그래밍 언어 활용 요약 입니다. 정처기 공부를 할 때 활용하세요."}}},{"node":{"frontmatter":{"type":null,"title":"[2020] 정보 처리 기사 실기 1-프로그래밍 언어 활용(1)","images":["images/1.jpg"],"path":"/[2020] 정보 처리 기사 실기 1-프로그래밍 언어 활용(1)/","tags":["정보처리기사 실기","정보처리기사","정처기"],"date":"2020-07-11T20:21:00.000Z","summary":"2020 정보 처리 기사 프로그래밍 언어 활용 요약 입니다. 정처기 공부를 할 때 활용하세요."}}},{"node":{"frontmatter":{"type":null,"title":"[파이썬] 파이썬을 이용한 이진탐색트리 구현","images":["images/4.jpg"],"path":"/[파이썬] 파이썬을 이용한 이진탐색트리 구현/","tags":["파이썬","알고리즘","이진탐색트리"],"date":"2020-07-06T22:06:00.000Z","summary":"파이썬을 이용한 이진탐색트리 구현"}}},{"node":{"frontmatter":{"type":null,"title":"2020 정보처리기사 필기 요점 정리(5)-프로그래밍 언어 활용(3)","images":["images/2.jpg"],"path":"/2020 정보처리기사 필기 요점 정리(5)-프로그래밍 언어 활용(3)/","tags":["정보처리기사 필기","정보처리기사"],"date":"2020-05-03T01:00:00.000Z","summary":"2020 정보처리기사 필기 요점 정리(5)-프로그래밍 언어 활용(3)"}}},{"node":{"frontmatter":{"type":null,"title":"2020 정보처리기사 필기 요점 정리(5)-프로그래밍 언어 활용(2)(운영체제)","images":["images/2.jpg"],"path":"/2020 정보처리기사 필기 요점 정리(5)-프로그래밍 언어 활용(2)(운영체제)/","tags":["정보처리기사 필기","정보처리기사"],"date":"2020-05-02T01:00:00.000Z","summary":"응용 SW 기초 기술 활용"}}},{"node":{"frontmatter":{"type":null,"title":"2020 정보처리기사 필기 요점 정리(5)-프로그래밍 언어 활용(1)","images":["images/2.jpg"],"path":"/2020 정보처리기사 필기 요점 정리(5)-프로그래밍 언어 활용(1)/","tags":["정보처리기사 필기","정보처리기사"],"date":"2020-05-01T01:00:00.000Z","summary":"2020 정보처리기사 필기 요점 정리(5)-프로그래밍 언어 활용(1)"}}},{"node":{"frontmatter":{"type":null,"title":"2020 정보처리기사 필기 요점 정리(4)-정보시스템 구축 관리(3)","images":["images/2.jpg"],"path":"/2020 정보처리기사 필기 요점 정리(4)-정보시스템 구축 관리(3)/","tags":["정보처리기사 필기","정보처리기사"],"date":"2020-04-03T03:05:00.000Z","summary":"정보시스템 구축 관리"}}},{"node":{"frontmatter":{"type":null,"title":"2020 정보처리기사 필기 요점 정리(4)-정보시스템 구축 관리(2)","images":["images/2.jpg"],"path":"/2020 정보처리기사 필기 요점 정리(4)-정보시스템 구축 관리(2)/","tags":["정보처리기사 필기","정보처리기사"],"date":"2020-04-02T03:05:00.000Z","summary":"2020 정보처리기사 필기 요점 정리(4)-정보시스템 구축 관리(2)"}}},{"node":{"frontmatter":{"type":null,"title":"2020 정보처리기사 필기 요점 정리(4)-정보시스템 구축 관리(1)","images":["images/2.jpg"],"path":"/2020 정보처리기사 필기 요점 정리(4)-정보시스템 구축 관리(1)/","tags":["정보처리기사 필기","정보처리기사"],"date":"2020-04-01T03:05:00.000Z","summary":"2020 정보처리기사 필기 요점 정리(4)-정보시스템 구축 관리(1)"}}},{"node":{"frontmatter":{"type":null,"title":"2020 정보처리기사 필기 요점 정리(3)-소프트웨어 설계(3)","images":["images/2.jpg"],"path":"/2020 정보처리기사 필기 요점 정리(3)-소프트웨어 설계(3)/","tags":["정보처리기사 필기","정보처리기사"],"date":"2020-03-03T02:01:00.000Z","summary":"2020 정보처리기사 필기 요점 정리(3)-소프트웨어 설계(3)"}}},{"node":{"frontmatter":{"type":null,"title":"2020 정보처리기사 필기 요점 정리(3)-소프트웨어 설계(2)","images":["images/2.jpg"],"path":"/2020 정보처리기사 필기 요점 정리(3)-소프트웨어 설계(2)/","tags":["정보처리기사 필기","정보처리기사"],"date":"2020-03-02T02:01:00.000Z","summary":"2020 정보처리기사 필기 요점 정리(3)-소프트웨어 설계(2)"}}},{"node":{"frontmatter":{"type":null,"title":"2020 정보처리기사 필기 요점 정리(3)-소프트웨어 설계(1)","images":["images/2.jpg"],"path":"/2020 정보처리기사 필기 요점 정리(3)-소프트웨어 설계(1)/","tags":["정보처리기사 필기","정보처리기사"],"date":"2020-03-01T02:01:00.000Z","summary":"2020 정보처리기사 필기 요점 정리(3)-소프트웨어 설계(1)"}}},{"node":{"frontmatter":{"type":null,"title":"2020 정보처리기사 필기 요점 정리(2)-소프트웨어 개발(3)","images":["images/2.jpg"],"path":"/2020 정보처리기사 필기 요점 정리(2)-소프트웨어 개발(3)/","tags":["정보처리기사 필기","정보처리기사"],"date":"2020-02-03T05:00:00.000Z","summary":"2020 정보처리기사 필기 요점 정리(2)-소프트웨어 개발(3)"}}},{"node":{"frontmatter":{"type":null,"title":"2020 정보처리기사 필기 요점 정리(2)-소프트웨어 개발(2)","images":["images/2.jpg"],"path":"/2020 정보처리기사 필기 요점 정리(2)-소프트웨어 개발(2)/","tags":["정보처리기사 필기","정보처리기사"],"date":"2020-02-02T05:00:00.000Z","summary":"2020 정보처리기사 필기 요점 정리(2)-소프트웨어 개발(2)"}}},{"node":{"frontmatter":{"type":null,"title":"2020 정보처리기사 필기 요점 정리(2)-소프트웨어 개발(1)","images":["images/2.jpg"],"path":"/2020 정보처리기사 필기 요점 정리(2)-소프트웨어 개발(1)/","tags":["정보처리기사 필기","정보처리기사"],"date":"2020-02-01T05:00:00.000Z","summary":"2020 정보처리기사 필기 요점 정리(2)-소프트웨어 개발(1)"}}},{"node":{"frontmatter":{"type":null,"title":"2020 정보처리기사 필기 요점 정리(1)-데이터베이스 구축(3)","images":["images/2.jpg"],"path":"/2020 정보처리기사 필기 요점 정리(1)-데이터베이스 구축(3)/","tags":["정보처리기사 필기","정보처리기사"],"date":"2020-01-03T05:00:00.000Z","summary":"2020 정보처리기사 필기 요점 정리(1)-데이터베이스 구축(3)"}}},{"node":{"frontmatter":{"type":null,"title":"2020 정보처리기사 필기 요점 정리(1)-데이터베이스 구축(2)","images":["images/2.jpg"],"path":"/2020 정보처리기사 필기 요점 정리(1)-데이터베이스 구축(2)/","tags":["정보처리기사 필기","정보처리기사"],"date":"2020-01-02T05:00:00.000Z","summary":"2020 정보처리기사 필기 요점 정리(1)-데이터베이스 구축(2)"}}},{"node":{"frontmatter":{"type":null,"title":"2020 정보처리기사 필기 요점 정리(1)-데이터베이스 구축(1)","images":["images/2.jpg"],"path":"/2020 정보처리기사 필기 요점 정리(1)-데이터베이스 구축(1)/","tags":["정보처리기사 필기","정보처리기사","필기","데이터베이스 구축"],"date":"2020-01-01T05:00:00.000Z","summary":"2020 정보처리기사 필기 요점 정리(1)-데이터베이스 구축(1)"}}},{"node":{"frontmatter":{"type":"portfolio","title":"CAPTURE BLOG","images":["CaptureBlog/images/capture1.png","CaptureBlog/images/capture2.png","CaptureBlog/images/capture3.png","CaptureBlog/images/capture4.png","CaptureBlog/images/capture5.png","CaptureBlog/images/capture6.png"],"path":"/portfolios/CAPTURE BLOG/","tags":null,"date":"2020-01-01T00:00:00.000Z","summary":null}}},{"node":{"frontmatter":{"type":"portfolio","title":"LANGUAGE TOGETHER","images":["languageTogether/images/languagetogether.png","languageTogether/images/languagetogether2.png","languageTogether/images/languagetogether3.png","languageTogether/images/languagetogether4.png","languageTogether/images/languagetogether5.png","languageTogether/images/languagetogether6.png","languageTogether/images/languagetogether7.png","languageTogether/images/languagetogether8.png","languageTogether/images/languagetogether9.png"],"path":"/portfolios/LANGUAGE TOGETHER/","tags":null,"date":"2018-01-01T00:00:00.000Z","summary":null}}},{"node":{"frontmatter":{"type":"portfolio","title":"MOVIE STAR","images":["moviestar/images/moviestar.png","moviestar/images/moviestar2.png","moviestar/images/moviestar3.png","moviestar/images/moviestar4.png"],"path":"/portfolios/MOVIE STAR/","tags":null,"date":"2018-01-01T00:00:00.000Z","summary":null}}},{"node":{"frontmatter":{"type":"resume","title":"Resume","images":null,"path":"/resume/","tags":null,"date":"2000-01-01T00:00:00.000Z","summary":null}}}]}},"pageContext":{}}}